Como usar variáveis ​​dentro de um select (SQL Server)?

8

Se eu quiser calcular uma coluna e usar o resultado em mais de uma coluna, como faço isso sem fazer o cálculo duas vezes?

Exemplo:

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

Como evito escrever isso duas vezes sem usar mais de uma seleção?

sangue-amarelo
fonte

Respostas:

13

Tabela derivada

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

No entanto, nesse caso, eu consideraria o uso de uma coluna computada com o hash pré-calculado

gbn
fonte
Desde que o domínio seja estático e dinâmico por solicitação, a coluna do computador é uma ótima idéia.
Robert Miller
3

Primeiro, acho que você queria escrever hashbytes em vez de haststring. hashstring não é uma função SQL.

Aqui está o código que lhe dará o que você deseja, espero.

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
fonte