2013-07-22 80 views
0

我想比較2 varchar字段,看看他們是否相似,我有點麻煩試圖找到我的答案在任何地方。我嘗試過使用SOUNDEX和DIFFERENCE,但他們沒有給我我需要的東西。檢查2個值,找到相同的字符串

這就是我要做的: -

Column 1 Column 2 Column 3 
123 456 456 123 Should show 1 or "Yes" 
123 456 789 987 Should show 0 or "No" 

這通常是一種代碼和帳號,但他們經常出現在田間地頭的交換循環,所以我想剔除出來

任何幫助將是巨大的

+0

好吧,如果你知道每個字符串部分的長度,你可以使用類似SUBSTR的東西來比較四種不同的組合。但這只是一個骯髒的檢查方式。可能有一些更乾淨的方法。這就是我不會將此作爲答案發布的原因;) – UrGuardian4ngel

+0

您只需考慮完整匹配,即'123'包含在'123'中,應該是'1'或者您應該需要完整的塊空間是相似的?你正在使用哪種RDBMS? –

+0

爲什麼不使用 SELECT * FROM第2列WHERE第1列<>第2列?這應該帶回不同的值 –

回答

0

不知道你正在使用的RDBMS,但這部作品在SQL服務器分割字段:

DECLARE @str VARCHAR(10) = '123 456' 
SELECT LEFT(@str,CHARINDEX(' ',@str)-1)'' 
     ,RIGHT(@str,CHARINDEX(' ',REVERSE(@str))-1) 

在你的情況下,假設雙方都必須符合:

SELECT col1 
     ,col2 
     ,CASE WHEN col1 = col2 THEN 1 
      WHEN LEFT(col1,CHARINDEX(' ',col1)-1) = RIGHT(col2,CHARINDEX(' ',REVERSE(col2))-1) 
       AND LEFT(col2,CHARINDEX(' ',col2)-1) = RIGHT(col1,CHARINDEX(' ',REVERSE(col1))-1) THEN 1 
      ELSE 0 
     END 
FROM YourTable 

如果你試圖隔離匹配的號碼是不按順序,那麼也可以把第一和第二WHEN線不同THEN值。

+0

非常好,非常感謝! –