MS SQL - WHERE子串匹配是拼音?

时间:2011-04-27 18:00:11

标签: sql-server tsql sql-server-2008

我想制作一个基于“听起来像”匹配的搜索功能。

例如,假设我有一个看起来像这样的公司列表(假设我们也住在Bizzaro世界):

  • Acme公司
  • 已经暗示引用LTD
  • 所有准备好的幻想网站INC
  • 除了同意
  • Assent sight

(或者与名字相似的东西...... GeorgeJeorge?“Yah-way”,或“ye-hova”?)

当有人搜索“听起来像”soundex("site") == S230的内容时,他们也会看到“视线”的结果。

由于大多数使用过soudnex的人已经知道,正常的子串匹配显然不会这样做。

我正在尝试在脑海中解决如何基于此创建一个可以匹配的WHERE子句,所以我想运行soundex而不是典型的WHERE company LIKE input。显然,如果我在整个公司名称上运行soundex,我将无法进行子字符串搜索(例如,搜索“ALL”的用户永远不会匹配“All ready”的soundex)。 Soundex在每个单词上的分割也许不值得,所以我不确定运行soundex的所有组合是个好主意......或者即使在具有超过1000条记录的数据库中计算可行也是如此。

基本上我想要的互动是(在办公室或其他什么地方)汤姆对莎莉说“这个名字就像 Rebekkah Schwartzkopff ”,可以用语音搜索模糊匹配。

显然,由于soudnex,我们会遇到非英语公司的问题,但我会在这个问题上妥协。

我想在不向数据库或存储过程添加任何内容的情况下执行此操作。

2 个答案:

答案 0 :(得分:2)

如果SOUNDEX是你正在做的事情的良好开端,你可以使用DIFFERENCE

例如:

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

请注意,DIFFERENCE函数使用值0-4返回两个字符串的SOUNDEX值之间的差异; 4意味着字符串非常接近相同,0表示它们完全不同(对我来说是向后缩放的类型,但我认为它有效)。

答案 1 :(得分:1)

非常有趣的问题。我做了一点戳,发现了这个:

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

我自己没有测试过,但似乎值得一试。

它需要您向数据库添加内容,但我不知道如何使用内置的SQL Server功能实现所需的功能......

相关问题