web-development-kb-eu.site

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

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?

8
yellowblood

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

13
gbn

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