【问题标题】:SQL DIFFERENCE function with names bringing too many results名称带来太多结果的 SQL DIFFERENCE 函数
【发布时间】:2015-05-28 17:10:38
【问题描述】:

我有一个函数,它使用SQL DIFFERENCE 函数来查看客户端的名称是否与数据库中已有的客户端相似

SELECT ID FROM People p
WHERE DIFFERENCE(p.FullName, @fullName) = 4

作为@fullname 传递给函数的变量。我遇到的问题是,如果我将“pedro sanchez”作为参数传递,查询将带给我数据库中的所有 Peter,或者如果我输入“pablo sanchez”,它将带来记录“PEOPLE'S CREDIT UNION” .

据我了解,当两个字符串几乎相同时,DIFFERENCE 函数应该返回 4,但我的结果却另有说明。

有没有办法进一步指定与 DIFFERENCE 函数的相似性,或者寻找相似名称的另一种方法?

【问题讨论】:

    标签: sql sql-server database difference


    【解决方案1】:

    Difference() 是基于 soundex() 的,而 soundex() 反过来 - 坦率地说 - 是一个用于比较字符串的糟糕系统。让我补充一点:它的设计目的非常好,即匹配英语中的人的姓氏。你可以阅读规则here,也可以试试here。使用后一个链接,您可以看到“Pedro”和“People”具有相同的代码,P-140。

    Soundex 对 辅音 进行编码,基本上前四个匹配的辅音是它关心的列表。 (某些语言,例如夏威夷语和其他波利尼西亚语的辅音比较轻。可以假设设计者没有考虑这些语言中的名称。)

    当您寻找书面字符串之间的接近度时,Levenshtein distance 是一个常用指标。不幸的是,SQL Server 没有内置此功能,但您可以在 Web 上轻松找到实现。对于大多数实际应用,Levenshtein 距离太慢了。令人高兴的是,全文搜索组件的功能通常足以满足大多数用途。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-22
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多