0

SQL SOUNDEX函数用于模糊字符串匹配时,有没有办法增加容错能力?我正在使用它来搜索供应商名称。我所拥有的是:

WHERE
    SOUNDEX(@SearchTerm) = SOUNDEX(s.Name)

这在某种程度上有效,但我想稍微提高容错性。例如:

SOUNDEX('test') = T230
SOUNDEX('tet') = T300
SOUNDEX('tets') = T320
SOUNDEX('tes') = T200

理想情况下,我希望所有这些示例都匹配。此外,一个小问题是当供应商名称由 2 个单词组成并且用户按第二个单词搜索时,这显然会起作用,因为行进取决于单词的第一个字母:

SOUNDEX('test supplier') = T230
SOUNDEX('supplier') = S146

最初,我在 Web 应用程序中使用了一个模糊字符串比较库,该库使用了各种近似字符串比较算法,但事实证明,当 20 个人同时搜索 5000 多个供应商时,Web 服务器无法处理。我现在尝试在存储过程中执行此操作,以便数据库仅返回搜索结果,而不是要搜索的供应商的完整列表。

4

1 回答 1

1

您可以使用SQL CLR 集成实现 UDF 并将其部署在服务器中。(更具体:CLR 标量值函数

我可以保证这是可行的,因为我正在做同样的事情并查看超过 350.000 行(没有任何其他过滤器)并且它运行得非常快。它是 Damerau-Leventshein 算法的变体,因此是一种耗时的算法。

将所有行返回给应用程序,并在应用程序端对其进行过滤,与直接在 SQL Server 内部进行过滤之间的区别是巨大的。

于 2014-09-16T08:39:46.850 回答