1

谁能给我一些示例 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 个可能的值。我很想说当两个电子邮件地址产生相同的校验和时,只有 4,294,967,295 个可能的值会导致潜在的冲突。Raj 建议的纯字符串比较 (email1 = email2) 可以防止这种冲突,因为电子邮件地址本质上是唯一的。

cf: [ https://msdn.microsoft.com/en-us/library/ms189788(v=SQL.100).aspx?ranMID=24542&ranEAID=TnL5HPStwNw&ranSiteID=TnL5HPStwNw-pDIZxu_YsTXD2vBagzBEKA&tduid=(e03e708849bdae31622c749be9e951f9)(256380)(2459594)( 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

测试两个电子邮件地址是否具有相同的域:

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 回答