2010-04-30 127 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