2011-04-27 50 views
2

我想製作一個基於「聽起來像」匹配的搜索功能。MS SQL - WHERE子字符串匹配是拼音嗎?

舉例來說,可以說我有一個公司的名單,看起來像這樣(可以說,我們生活在Bizzaro世界太):

  • 阿克米
  • 已經典故引用LTD
  • 所有準備錯覺網站INC
  • 除了同意
  • 御批視線

(或類似的名稱... GeorgeJeorge? 「Yah-way」或「ye-hova」?)

當有人搜索「聽起來像」soundex("site") == S230的東西時,他們也應該看到「Sight」的結果。

由於大多數使用soudnex之前已經知道,普通的子串匹配顯然不會這樣做。

我想在我的腦海裏工作如何使基於這個匹配的WHERE子句,所以而不是典型的WHERE company LIKE input,我想運行soundex。顯然,如果我在整個公司名稱上運行soundex,我將無法進行子字符串搜索(例如,搜索「ALL」的用戶將永遠不匹配「All ready」的soundex)。 Soundex在每個單詞上分割也許並不值得,所以我不確定運行soundex的所有組合是一個好主意......或者即使在具有超過1000條記錄的數據庫中這在計算上是可行的。

基本上我想有相互作用時(在辦公室或某事),湯姆說薩莉「這名字是像Rebekkah Schwartzkopff」,它可以按照發音來搜索模糊匹配。

顯然我們會因爲soudnex而遇到與非英文公司有關的問題,但我會在這個問題上妥協。

我想這樣做而不添加任何東西到數據庫或存儲過程。

回答

1

非常有趣的問題。我做了一些閒逛,發現這個:

http://www.codeproject.com/KB/database/dmetaphone4.aspx

我沒有測試它自己,但它看起來像這將是值得一試。

它需要你的東西添加到數據庫中,但我看不出你如何能實現你想建於SQL Server的功能的功能...

2

如果SOUNDEX是一個良好的開端是什麼你在做什麼,你可以用DIFFERENCE

例如:

SELECT * 
FROM Person 
WHERE DIFFERENCE(Person.FirstName, 'George') >= 3 

注意,差函數返回使用的0-4的值的兩個字符串的SOUNDEX值之間的差; 4意味着字符串非常接近相同,0意味着它們完全不同(對我來說是一種倒退的比例,但我認爲它是有效的)。

+0

如果您確實無法向數據庫添加任何內容,差異可能是您的最佳選擇 – 2011-04-27 18:12:01