it-swarm.it

Come utilizzare le variabili all'interno di una selezione (SQL Server)?

Se voglio calcolare una colonna e utilizzare il risultato in più di una colonna, come posso fare senza effettuare il calcolo due volte?

Esempio:

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

Come posso evitare di scriverlo due volte senza usare più di una selezione?

8
yellowblood

Tabella derivata

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

o 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

Tuttavia, in questo caso prenderei in considerazione l'utilizzo di un colonna calcolata con l'hash precalcolato

13
gbn

Innanzitutto, penso che tu volessi scrivere hashbyte invece di haststring. hashstring non è una funzione SQL.

Ecco il codice che ti darà ciò che vuoi, spero.

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;
3
yrushka