¿Cómo usar variables dentro de un select (SQL Server)?

8

Si quiero calcular una columna y usar el resultado en más de 1 columna, ¿cómo hago esto sin hacer la computación dos veces?

Ejemplo:

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

¿Cómo evito escribir esto dos veces sin usar más de una selección?

sangre amarilla
fuente

Respuestas:

13

Tabla derivada

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

Sin embargo, en este caso consideraría usar una columna calculada con el hash precalculado

gbn
fuente
Siempre y cuando el dominio sea estático y dinámico por solicitud, la columna de la computadora es una idea excelente.
Robert Miller
3

Primero, creo que querías escribir hashbytes en lugar de isquiotibiales. hashstring no es una función SQL.

Aquí está el código que te dará lo que quieres, 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
fuente