我想知道为什么:
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
不应该出现。
谢谢
答案 0 :(得分:3)
一个简单的答案:因为SOUNDEX
是一个simple algorithm,而且空间有限(一个字母和三个数字),并且您所有的示例都碰巧翻译成同一个S534
考虑到字母S,C,M和D。顺带提一下,Schöntal只考虑了S,C,N和T,它们产生相同的输出,因为M和N的编码方式与D和T相同。>