Wie verwende ich Variablen in einem Select (SQL Server)?

8

Wenn ich eine Spalte berechnen und das Ergebnis in mehr als einer Spalte verwenden möchte, wie mache ich das, ohne die Berechnung zweimal durchzuführen?

Beispiel:

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

Wie vermeide ich es, dies zweimal zu schreiben, ohne mehr als eine Auswahl zu verwenden?

Gelbblut
quelle

Antworten:

13

Abgeleitete Tabelle

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

oder 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

In diesem Fall würde ich jedoch in Betracht ziehen, eine berechnete Spalte mit dem vorberechneten Hash zu verwenden

gbn
quelle
Solange die Domäne pro Anforderung statisch und dynamisch ist, ist die Computerspalte eine großartige Idee.
Robert Miller
3

Erstens, ich denke, Sie wollten Hashbytes anstelle von Haststring schreiben. Hashstring ist keine SQL-Funktion.

Hier ist der Code, mit dem Sie wollen, was Sie wollen, hoffe ich.

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
quelle