2013-07-05 43 views
0

我有兩個字段的表:firstnamedb1和firstnamedb2在兩場不同的SQL找主角

我需要得到那些犯規的比賽,但也想知道有多少個字符是不同的。

例如,如果我有:

firstnamedb1  firstnamedb2 
RICHARD    RICHRAD 

然後我知道這是一個不匹配的結果,但也我知道,只有2個字符是不同的。

這樣我就知道,「可能」,沒有匹配的結果是misstype錯誤,可以手動修復非常容易。

希望有人能幫助我。非常感謝

+0

我想不出一個不會非常繁瑣的解決方案。加上這個事實,有很多西方人的名字只有一個字母(Jay-Jan,Alex-Alec,Simon-Simone),我不禁質疑你的做法。爲了儘可能多地計算字母的不同長度(以及處理不同長度的名稱),您可能需要製作一些粗糙的字體,然後在視覺上進行其他處理。保羅和寶拉可能很高興結婚(或者你代表的任何關係),而寶拉則因爲人們不斷將她的名字改爲保羅而臨牀上很沮喪。 – Zec

回答

0
select firstnamedb1, firstnamedb2, dbo.numdiffchars(firstnamedb1, firstnamedb2) 
from yourTable 
where firstnamedb1 <> firstnamedb2 


create function dbo.numdiffchars(@n1 varchar(60), @n2 varchar(60)) 
returns int 
as begin 
    declare @baselen int, 
      @extension int, 
      @xpos int, 
      @numdiff int; 
    if len(@n1) <= len(@n2) select @baselen = len(@n1) 
    else select @baselen = len(@n2) 

    if len(@n1) < @baselen select @extension = (@baselen - len(@n1)) 
    else if len(@n2) < @baselen select @extension = (@baselen - len(@n2)) 

    select @xpos = 0, @numdiff = 0; 
    while @xpos < @baselen begin 
    select @xpos = @xpos + 1 
    if substring(@n1, @xpos, 1) <> substring(@n2, @xpos, 1) 
     select @numdiff = @numdiff + 1 
    end 

    return @numdiff + @extension 
end 

如果這解決了您的問題,請標記爲答案。

+0

即時通訊運行它,但我得到NULL,任何線索?非常感謝 – VAAA

+0

唯一值得關注的是被比較的名稱之一是否爲空;我沒有構建函數來適應這種情況,但如果是這種情況,請將select語句更改爲:從yourTable中選擇firstnamedb1,firstnamedb2,dbo.numdiffchars(isnull(firstnamedb1,''),isnull(firstnamedb2,''))其中isnull(firstnamedb1,'')<> isnull(firstnamedb2,'') –