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?

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


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;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.