SQL Server Express:对SIMILAR名称的查询比LIKE更好

时间:2012-01-26 18:04:53

标签: sql sql-server-express

我需要一个特殊的运算符,它可能比LIKE更好地查询“相似”值。

情景:
我有一张学生桌,我有一桌课。课程表是从其他软件导入的,因此导入的行上的StudentID列为空。因此,我们需要用户为每个课程手动选择相应的学生行,然后可以填充StudentID列,以便它们正确同步。这两个表都包含名字和姓氏,但很多表格很可能拼写错误。

导入行后,我想向用户显示学生行中名称与每个课程行中存储的值“最相似”的名称。事实上,我想以最低至最低的相似顺序呈现它们。

包含LIKE运算符的查询并没有完全删除它,因为它要求列中必须存在特定文本,并且它不会返回“相似性得分”。

我的理解(来自非技术文章)美国邮政局已经很好地处理了这个问题......人们一直拼错名字和街道名称,但他们的“找到相似”的算法非常有效。

我知道算法可能因解决方案而异。例如,我从文章中读到一些算法考虑语音,其他算法考虑元音和辅音的数量,而另一些则认为“T”在通过电话说话时听起来像“P”。

我可以将每条记录加载到我的应用程序代码中,并在c#,VB.NET或其他任何地方编写我自己的算法,但是存在很多问题,包括性能。我宁愿在查询中完成这个,所以我正在寻找替代方案。

我正在使用SQL Server Express,但我确信该解决方案适用于其他数据库平台。

2 个答案:

答案 0 :(得分:1)

SQL Server支持SOUNDEX()函数,但这仅适用于类似的声音名称,并且不适用,至少如果您处理非英语文本。您可以在c#或vb.net中编写自己的函数,促进任何可能适用于您的需求的算法,并将其作为标量函数导入到sql server中。

答案 1 :(得分:1)

SQL FreeText可能适合您:

http://msdn.microsoft.com/en-us/library/ms176078.aspx

它搜索同义词库,虽然我不确定它对名字的作用有多好。 但是,它很容易实现。