2012-11-13 132 views
0

任何人都可以给我一些示例TSQL代码来比较两个电子邮件地址来检查它们是否相等?TSQL函数比较两个字符串

CLR函数不是一个选项。我尝试过,但由于某种原因,我们的DBA完全反对在SSMS中使用CLR函数。

我知道如何从电子邮件地址获取域名(例如:mycompany.com)。

真的很感激任何建议提前

+4

,嗯,你并不需要一个UDF来比较两个字符串是否相等 - 这有什么错用'='? – Blorgbeard

+0

通过比较你是指相似还是相等? – Chandu

+1

您的问题表明您知道如何从电子邮件地址获取域名 - 只需比较这些字符串?或者是一个错字,你打算说你*不知道? – Blorgbeard

回答

5

不是真的知道你正在寻找。从你的问题,我明白你需要检查2个电子邮件地址相似/不相似。

为什么你不能使用它?

declare @email1 varchar(100) set @email1 = '[email protected]' 
declare @email2 varchar(100) set @email2 = '[email protected]' 
IF 
@[email protected] 
BEGIN 
    PRINT 'Same Email' 
END 
ELSE 
BEGIN 
    PRINT 'Not Same Email' 
END 

拉吉

+0

非常好的简单实现,但没有考虑到CI和CS。使用校验和来满足粒度需求,如Aleksandr所述。 – GoldBishop

0

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

declare @email1 varchar(100) set @email1 = '[email protected]' 
declare @email2 varchar(100) set @email2 = '[email protected]' 

select 
    case when 
    right(@email1, len(@email1) - charindex('@', @email1)) = 
    right(@email2, len(@email2) - charindex('@', @email2)) 
    then 'Same domain' 
    else 'Different domains' 
    end 
+0

谢谢大家的回答。我得到了我一直在寻找的 –

6

在SQL Server 2005+使用功能校验和()

校验计算散列值,称为校验,在它的参数列表。散列值旨在用于构建散列索引。如果CHECKSUM的参数是列,并且索引是根据计算的CHECKSUM值构建的,那么结果就是一个哈希索引。这可以用于列上的平等搜索。 更多信息有关CHECKSUM()

DECLARE @email1 varchar(100) = '[email protected]' 
DECLARE @email2 varchar(100) = '[email protected]' 
SELECT CASE WHEN CHECKSUM(@email1) = CHECKSUM(@email2) THEN 'Same Email' 
                 ELSE 'Different Email' END 
0

尽管这是一个老帖子,我想使用校验和解决方案发表意见是很重要的。根据定义,校验和属于有限空间,因此具有有限数量的不同值。用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]