it-swarm-eu.dev

Jak používat proměnné uvnitř výběru (SQL Server)?

Pokud chci vypočítat sloupec a použít výsledek ve více než 1 sloupci, jak to mohu udělat, aniž bych provedl výpočet dvakrát?

Příklad:

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

Jak se mohu vyhnout zápisu dvakrát bez použití více než jednoho výběru?

8
yellowblood

Odvozená tabulka

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

nebo 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

V tomto případě bych však uvažoval o použití vypočtený sloupec s předem vypočítaným hashem

13
gbn

Nejprve si myslím, že jste chtěli psát hashbytes místo haststringu. hashstring není funkce SQL.

Zde je kód, který vám dá, jak chcete, doufám.

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