谁能给我一些示例 TSQL 代码来比较两个电子邮件地址以检查它们是否相等?
CLR 函数不是一个选项。我试过了,但我们的 DBA 出于某种原因完全反对在 SSMS 中使用 CLR 函数。
我知道如何从电子邮件地址获取域名(例如:mycompany.com)。
非常感谢任何建议
提前谢谢
谁能给我一些示例 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 个可能的值。我很想说当两个电子邮件地址产生相同的校验和时,只有 4,294,967,295 个可能的值会导致潜在的冲突。Raj 建议的纯字符串比较 (email1 = email2) 可以防止这种冲突,因为电子邮件地址本质上是唯一的。
[ 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
测试两个电子邮件地址是否具有相同的域:
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