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?
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
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;