SQL Server语言 - SQL DIFFERENCE 函数,其名称带来太多结果



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

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

被@fullname传递给函数的变量。我遇到的问题是,如果我传递"佩德罗·桑切斯"作为参数,查询将把我所有的彼得都带到数据库中,或者如果我输入"巴勃罗·桑切斯",它会带来记录"人民信用社"。

据我了解,当两个字符串几乎相同时,DIFFERENCE 函数应该返回 4,但我得到的结果并非如此。

有没有办法进一步指定与 DIFFERENCE 函数的相似之处,或者可能是另一种查找相似名称的方法?

Difference()是基于soundex()的,坦率地说,这反过来又是一个用于比较字符串的糟糕系统。让我补充一个警告:它的设计目的非常好,即匹配英语人的姓氏。您可以在此处阅读有关规则的信息,也可以在此处尝试。使用后一个链接,您可以看到"佩德罗"和"人"具有相同的代码 P-140。

Soundex对辅音进行编码,基本上前四个匹配的辅音是它关心的列表。(有些语言,如夏威夷语和其他波利尼西亚语言,辅音相当轻。人们假设设计师没有考虑这些语言的名称。

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

最新更新