2012-11-13 187 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]