2つの電子メールアドレスを比較して、それらが等しいかどうかを確認するためのサンプルTSQLコードを誰かに教えてもらえますか?
CLR関数はオプションではありません。私はそれを試しましたが、何らかの理由でDBAはSSMSでCLR関数を使用することに完全に反対しています。
メールアドレスからドメイン名(例:mycompany.com)を取得する方法を知っています。
提案を本当に感謝します
事前に感謝します
2つの電子メールアドレスを比較して、それらが等しいかどうかを確認するためのサンプルTSQLコードを誰かに教えてもらえますか?
CLR関数はオプションではありません。私はそれを試しましたが、何らかの理由でDBAはSSMSでCLR関数を使用することに完全に反対しています。
メールアドレスからドメイン名(例:mycompany.com)を取得する方法を知っています。
提案を本当に感謝します
事前に感謝します
何を探しているのかよくわかりません。あなたの質問から、2つのメールアドレスの類似性/非類似性を確認する必要があることを理解しています。
なんで使えないの?
declare @email1 varchar(100) set @email1 = 'billg@microsoft.com'
declare @email2 varchar(100) set @email2 = 'melinda@microsoft.com'
IF
@email1=@email2
BEGIN
PRINT 'Same Email'
END
ELSE
BEGIN
PRINT 'Not Same Email'
END
ラージ
SQL Server 2005以降では、関数CHECKSUM()を使用します
CHECKSUMは、引数のリストに対して、チェックサムと呼ばれるハッシュ値を計算します。ハッシュ値は、ハッシュインデックスの作成に使用することを目的としています。CHECKSUMの引数が列であり、計算されたCHECKSUM値に基づいてインデックスが作成される場合、結果はハッシュインデックスになります。これは、列の同等性検索に使用できます。CHECKSUM()に関する詳細情報
DECLARE @email1 varchar(100) = 'billg@microsoft.com'
DECLARE @email2 varchar(100) = 'melinda@microsoft.com'
SELECT CASE WHEN CHECKSUM(@email1) = CHECKSUM(@email2) THEN 'Same Email'
ELSE 'Different Email' END
これは古い投稿ですが、CHECKSUMを使用して解決策についてコメントすることが重要だと思います。定義上、チェックサムは有限空間に属しているため、有限数の異なる値を持ちます。32ビットの数値では、4,294,967,295の可能な値があります。2つの電子メールアドレスが同じチェックサムを生成する場合、潜在的な衝突の場所を残す可能性のある値は4,294,967,295のみであると言いたくなります。純粋な文字列の比較(email1 = email2)-Rajによって提案されているように-その性質上、電子メールアドレスは一意であるため、このような衝突を防ぎます。
[ http://preshing.com/20110504/hash-collision-probabilities/][2]
--patindex()関数はどうですか?
-小さな例:
create table t1 (tkey integer, val nvarchar(20) )
create table t2 (tkey integer, val nvarchar(20) )
insert into t1 (tkey, val) values (1, 'abc' )
insert into t1 (tkey, val) values (2, 'efgh' )
insert into t1 (tkey, val) values (3, 'xyz' )
insert into t2 (tkey, val) values (1, 'abc' )
insert into t2 (tkey, val) values (2, ' efgh' )
insert into t2 (tkey, val) values (3, 'xy z' )
select t1.val, t2.val, patindex( t1.val, t2.val )
from t1, t2
where t1.tkey = t2.tkey
2つの電子メールアドレスが同じドメインを持っているかどうかをテストします。
declare @email1 varchar(100) set @email1 = 'billg@microsoft.com'
declare @email2 varchar(100) set @email2 = 'melinda@microsoft.com'
select
case when
right(@email1, len(@email1) - charindex('@', @email1)) =
right(@email2, len(@email2) - charindex('@', @email2))
then 'Same domain'
else 'Different domains'
end