Comment utiliser des variables dans un select (SQL Server)?

8

Si je veux calculer une colonne et utiliser le résultat dans plus d'une colonne, comment dois-je faire sans faire deux fois le calcul?

Exemple:

SELECT LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com' as EMail
      ,hashbytes('SHA1', LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com') as HashedEmail
FROM sometable

Comment éviter d'écrire ceci deux fois sans utiliser plusieurs sélections?

yellowblood
la source

Réponses:

13

Table dérivée

SELECT
    EMail,
    hashbytes('SHA1', EMail) AS HashedEmail
FROM
    (
    SELECT LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com' as EMail
    FROM sometable
   ) foo

ou CTE:

;WITH cEMail AS
(
    SELECT LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com' as EMail
    FROM sometable
)
SELECT
    EMail,
    hashbytes('SHA1', EMail) AS HashedEmail
FROM
    cEMail

Cependant, dans ce cas, j'envisagerais d'utiliser une colonne calculée avec le hachage précalculé

gbn
la source
Tant que le domaine est statique et dynamique par demande, la colonne informatique est une excellente idée.
Robert Miller
3

Tout d'abord, je pense que vous vouliez écrire des hashbytes au lieu de haststring. hashstring n'est pas une fonction SQL.

Voici le code qui vous donnera envie que vous voulez j'espère.

DECLARE @yourvariable nvarchar (50) =  '@somedomain.com';

SELECT LOWER(SUBSTRING([NAME], 4, 100)) + @yourvariable  as EMail
      ,HashBytes('SHA1', LOWER(SUBSTRING([NAME], 4, 100)) +  @yourvariable) as HashedEmail 
FROM sometable;
yrushka
la source