为什么soundex返回无关的结果

时间:2018-07-04 05:59:17

标签: sql soundex

我想知道为什么:

  WHERE 1=1 
    AND   LTRIM(RTRIM(lastName)) ='Schmdli' 
        OR ( 
                SOUNDEX(lastName) = SOUNDEX('Schmdli')
            )

将结果返回给我

lastName
Schöntal
Schindler-Külling
Schindler
Schmidlin
Schindler
Schmidli
Schmidli
Schindler

我只希望:

Schmidli
Schmidli
Schmidlin

我的第一个AND LTRIM(RTRIM(lastName)) ='Schmdli'是要匹配精确值,然后使用soundex,我希望在Schmdli附近效果更好,这里的结果类似于

Schöntal
Schindler-Külling
Schindler

不应该出现。

谢谢

1 个答案:

答案 0 :(得分:3)

一个简单的答案:因为SOUNDEX是一个simple algorithm,而且空间有限(一个字母和三个数字),并且您所有的示例都碰巧翻译成同一个S534考虑到字母S,C,M和D。顺带提一下,Schöntal只考虑了S,C,N和T,它们产生相同的输出,因为M和N的编码方式与D和T相同。