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


8

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?

Risposte:


13

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 una colonna calcolata con l'hash precalcolato


Finché il dominio è statico e dinamico per richiesta, la colonna del computer è un'idea formidabile.
Robert Miller,

3

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;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.