如何在选择(SQL Server)中使用变量?

yel*_*ood 8 sql-server select

如果我想计算一列并在多于 1 列中使用结果,如何在不进行两次计算的情况下执行此操作?

例子:

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

如何避免在不使用多个选择的情况下写两次?

gbn*_*gbn 13

派生表

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

或 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
Run Code Online (Sandbox Code Playgroud)

但是,在这种情况下,我会考虑使用预先计算了哈希值的计算列