1

2つの電子メールアドレスを比較して、それらが等しいかどうかを確認するためのサンプルTSQLコードを誰かに教えてもらえますか?

CLR関数はオプションではありません。私はそれを試しましたが、何らかの理由でDBAはSSMSでCLR関数を使用することに完全に反対しています。

メールアドレスからドメイン名(例:mycompany.com)を取得する方法を知っています。

提案を本当に感謝します
事前に感謝します

4

5 に答える 5

8

何を探しているのかよくわかりません。あなたの質問から、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

ラージ

于 2012-11-13T06:51:27.430 に答える
8

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
于 2012-11-13T09:36:56.910 に答える
1

これは古い投稿ですが、CHECKSUMを使用して解決策についてコメントすることが重要だと思います。定義上、チェックサムは有限空間に属しているため、有限数の異なる値を持ちます。32ビットの数値では、4,294,967,295の可能な値があります。2つの電子メールアドレスが同じチェックサムを生成する場合、潜在的な衝突の場所を残す可能性のある値は4,294,967,295のみであると言いたくなります。純粋な文字列の比較(email1 = email2)-Rajによって提案されているように-その性質上、電子メールアドレスは一意であるため、このような衝突を防ぎます。

cf:[ https://msdn.microsoft.com/en-us/library/ms189788(v=SQL.100).aspx?ranMID=24542&ranEAID=TnL5HPStwNw&ranSiteID=TnL5HPStwNw-pDIZxu_YsTXD2vBagzBEKA&tduid=(e03e708849b TnL5HPStwNw-pDIZxu_YsTXD2vBagzBEKA)()] [1]

[ http://preshing.com/20110504/hash-collision-probabilities/][2]

于 2017-03-10T20:36:32.303 に答える
1

--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  
于 2019-01-23T13:00:48.207 に答える
0

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
于 2012-11-13T02:23:35.837 に答える