2012-02-20 84 views
2

我使用SQL Server 2005中的比賽,我已經進入一個系統的名字,我想他們比對錶,以尋找匹配。有關如何匹配如下內容的任何建議:SQL服務器 - 尋找名字

傳入值類似於「J.R. Thompson Corporation」 ,而值爲「The Jim Ryan Thompson Company」的數據庫中。

+1

您需要設置全文搜索同義詞:http://msdn.microsoft.com/en-us/library/ms142571.aspx – 2012-02-20 03:29:51

+0

看到運行DIFFERENCE(http)的結果會很有趣://msdn.microsoft.com/en-us/library/ms188753.aspx),所有這些字符串對,命令DESCending。 – 2012-02-20 08:02:47

回答

-1

沒有做全文搜索(這是專門做這些事),你可以在一個簡單的方式做到這一點,通過只用%通配符代替的空間和時間,並把%在開始和結束親近字符串:

DECLARE @input VARCHAR(50) = 'J.R. Thompson Corporation' 

SELECT * 
FROM Company 
WHERE Name LIKE '%' + REPLACE(REPLACE(@input, '.', '%'), ' ', '%') + '%' 

需要注意的是做任何類型的,你有一個領先的%符號不會從該列索引中受益LIKE搜索是很重要的。

注意這仍然不會收拾東西,如「公司」意爲‘公司’作爲你的榜樣

+0

這不適用於OP提供的輸入。 「JR」和「JimRyan」不匹配。 – 2012-02-20 04:03:50

+0

實際上它會與JR(OP在J和R之間有一個,但沒有這個不會工作)和JimRyan,因爲它會變成'%J%R%',它不適用於公司和公司正如我在底部所說的那樣。 – Seph 2012-02-20 04:04:54

+0

這是一個非常具體的例子。如果它被顛倒過來了,他想在J.R.的參數是JimRyan時找到J.R.?我不認爲你完全瞭解要求什麼 - 這是一個同義詞/模糊搜索問題,而不是一個LIKE問題。 – 2012-02-20 04:20:37

0

簡單地說 - 它不能這樣做,即使正火地址是複雜的,有你追隨只有特定的。 。規則(str所街,例如)我是在一個項目做,在德國15年前亂套,這麼說 - 因爲有些地方有特殊規則(M 4 =在一個城市有效的地址,例如,因爲內城是quandrants,或「大街德14月3公寓」打破了我們「第一NUMER是街道名稱的結束」規則)

整個事情變得woirse - 在你xample「JR」和「吉姆瑞恩「可能會或可能不一樣。還有,你可以設置一些規則,並得到了很多更容易地址(地址相同意味着在結尾的名字匹配可以EBE寬鬆),但總的來說,這是不是一個reasible方法。即使拼寫糾正也無法解決這個問題。沒有互聯網訪問的人工智能使用谷歌找出它是否匹配,沒有辦法規範化。是的,你可以fget命中率20%或30%,但給你留下左的錯誤和右的一噸可能比無用少從商業的角度來看。

至少需要一個標準化的標識符,您可以使用明確的選擇。門牌號碼,電話號碼,任何可以更容易標準化的內容,然後提供名稱匹配算法的指導。