select(SQL Server)内で変数を使用する方法


8

列を計算し、その結果を複数の列で使用する場合、計算を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回書くことを避けるにはどうすればよいですか?

回答:


13

派生テーブル

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

ただし、この場合は、事前計算されたハッシュを使用して計算列を使用することを検討します


ドメインがリクエストごとに静的で動的である限り、computer列は素晴らしいアイデアです。
ロバートミラー

3

まず、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;
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.