it-swarm.dev

Jak używać zmiennych wewnątrz zaznaczonego (SQL Server)?

Jeśli chcę obliczyć kolumnę i użyć wyniku w więcej niż 1 kolumnie, jak to zrobić bez podwójnego obliczania?

Przykład:

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

Jak uniknąć pisania tego dwukrotnie bez używania więcej niż jednego wyboru?

8
yellowblood

Tabela pochodna

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

lub 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

Jednak w tym przypadku rozważę użycie kolumna obliczeniowa z wstępnie obliczonym skrótem

13
gbn

Po pierwsze, myślę, że chciałeś pisać hashbytes zamiast haststring. hashstring nie jest funkcją SQL.

Oto kod, który da ci to, czego chcesz Mam nadzieję.

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;
3
yrushka