2011-11-01 38 views
1

我有一張擁有1,000個記錄的客戶表。作爲Web應用程序的一部分,我希望能夠爲用戶提供一個文本框,以在應用程序中輸入客戶名稱,然後顯示一些詳細信息。基於預定義列表的SQL最近匹配

顯然這取決於兩件事:1)客戶的姓名在數據庫記錄上正確輸入; 2)用戶在搜索框中正確輸入客戶姓名。

我想要做的是讓用戶輸入一些文本,系統然後返回必要的數據,如果有匹配或(更重要的是)顯示最近匹配的列表(即從客戶列表)供用戶選擇,如果沒有完全匹配。

因此,使用MS SQL 2005,有沒有一種簡單的方法來做後者?

Shaun。

+0

客戶名是否主要是英文的?還是國際? –

回答

0

最簡單的方法可能是

first look for the exact match 
if found display 
else query database again using LIKE operator 
(select name 
from table 
where name like '%nameEnteredByUser%') 
display user, all the possible combinations 

雖然有可能根據烏拉圭回合的要求

+0

我最初以爲使用LIKE,但是這並沒有考慮到錯字錯誤。例如。如果客戶的名字是Müller,用戶可以輸入Muller,Mueller等,這兩者都不會使用'LIKE'返回任何結果。 – user1011024

+0

是的,它不,這是最簡單的!你可以看看MGA提出的解決方案,soundex是一個合理的算法@ user1011024 – Zohaib

1

有一個匹配算法Soundex你可以伊斯利應用它來獲取匹配串看到this更多sophosticated的方法:

SELECT 
    FirstName, 
    SOUNDEX(FirstName) AS SoundTest, 
    DIFFERENCE(FirstName, 'textentered') As DiffTest 
FROM 
    customerTable 

這隻適用於如果列是一個詞,並且還有另一個matc hing算法Levenshtein Distance我想你應該看看

+0

Soundex使用英語名稱完美工作,但與國際名稱無關,因爲soundex使用英語的「類似探測」。 –

+0

@ user1011024谷歌對於「Levenshtein距離SQL Server 2005」,這很可能是你根據你的問題尋找的。 –