2010-04-30 285 views
3

我不是SQL專家。我試圖優雅地解決別人必須擁有的查詢問題。令人驚訝的是,Google沒有回報任何有幫助的東西。基本上,我的應用程序有一個「搜索」框。該搜索字段將允許用戶搜索系統中的客戶。我在我的SQL Server 2008數據庫中有一個名爲「Customer」的表。該表被定義如下:SQL Server 2008 - 搜索查詢

顧客

  • 用戶名(爲nvarchar)

  • 姓(nvarchar的)

  • 名字(nvarchar的)

盡你所能 想象一下,我的用戶會輸入不同情況下的查詢,並且可能會定期誤拼客戶的姓名。如何查詢我的客戶表並返回最接近他們查詢的25個結果?我不知道如何做這個排名,並考慮我的表中列出的三個字段。

謝謝!

回答

4

我建議full-text search。全文搜索將爲處理某些名稱變體提供大量選項,並可使用CONTAINSTABLE對結果的「親密度」進行排名。如果您發現全文搜索不足,您可能會考慮使用像Lucene這樣的第三方索引工具。

2

您可能需要使用嘗試SOUNDEXDIFFERENCE作爲全文搜索的替代方案。

SELECT TOP 25 UserName, FirstName, LastName 
FROM Customer 
WHERE DIFFERENCE(UserName, @SearchValue) > 2 
ORDER BY DIFFERENCE(UserName, @SearchValue), UserName