Как использовать переменные внутри выбора (SQL Server)?

8

Если я хочу вычислить столбец и использовать результат в более чем 1 столбце, как мне это сделать, не делая вычисления дважды?

Пример:

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

Как мне избежать написания этого дважды без использования более одного выбора?

yellowblood
источник

Ответы:

13

Производный стол

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

или 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

Однако в этом случае я бы подумал об использовании вычисляемого столбца с предварительно вычисленным хешем

ГБН
источник
Пока домен является статическим и динамическим для каждого запроса, компьютерная колонка является потрясающей идеей.
Роберт Миллер
3

Во-первых, я думаю, что вы хотели написать хеш-байты вместо строки быстрого доступа. hashstring не является функцией SQL.

Вот код, который даст вам то, что вы хотите, я надеюсь.

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
источник