Bagaimana cara menggunakan variabel di dalam pilih (SQL Server)?

8

Jika saya ingin menghitung kolom dan menggunakan hasilnya di lebih dari 1 kolom, bagaimana saya melakukan ini tanpa membuat komputasi dua kali?

Contoh:

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

Bagaimana saya menghindari menulis ini dua kali tanpa menggunakan lebih dari satu pilih?

darah kuning
sumber

Jawaban:

13

Tabel yang diturunkan

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

atau 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

Namun, dalam hal ini saya akan mempertimbangkan menggunakan kolom yang dihitung dengan hash yang dihitung sebelumnya

gbn
sumber
Selama domainnya statis dan dinamis berdasarkan permintaan, kolom komputer adalah ide yang hebat.
Robert Miller
3

Pertama, saya pikir Anda ingin menulis hashbytes daripada haststring. hashstring bukan fungsi SQL.

Berikut adalah kode yang akan memberi Anda inginkan yang Anda inginkan saya harap.

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
sumber