列を計算し、その結果を複数の列で使用する場合、計算を2回行わずにこれを行うにはどうすればよいですか?
例:
SELECT LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com' as EMail
,hashbytes('SHA1', LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com') as HashedEmail
FROM sometable
複数のselectを使用せずにこれを2回書き込むのを避けるにはどうすればよいですか?
派生テーブル
SELECT
EMail,
hashbytes('SHA1', EMail) AS HashedEmail
FROM
(
SELECT LOWER(SUBSTRING([NAME], 4, 100)) + '@somedomain.com' as EMail
FROM sometable
) foo
または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
ただし、この場合、ハッシュを事前計算して 計算列 を使用することを検討します
まず、haststringの代わりにハッシュバイトを書きたかったと思います。 hashstringはSQL関数ではありません。
これが、あなたが私が望む希望をあなたに与えてくれるコードです。
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;