SQL中DIFFERENCE函数返回结果存疑:精确匹配为何得4而非0
关于SQL DIFFERENCE函数返回值的疑问解答
首先要纠正一个核心误解:DIFFERENCE函数的返回值范围是0到4,4代表两个字符串的SOUNDEX编码完全匹配(相似度最高),0代表完全不匹配,和你以为的“0对应完全匹配”逻辑正好相反。
为什么你的两条记录都返回4?
DIFFERENCE函数的本质是对比两个字符串的SOUNDEX编码,返回两者从左到右匹配的字符数量(最多4位)。我们拆解你的例子:
- 'Matt'和'matt'的SOUNDEX编码都是
M300(SOUNDEX不区分大小写) - 'matthew'的SOUNDEX编码同样是
M300(SOUNDEX仅提取首字母+后续三个关键辅音,'matthew'末尾的字符不影响最终编码)
因为这三个字符串的SOUNDEX编码完全一致,所以DIFFERENCE返回最大值4。
额外提示
如果需要判断字符串是否完全相等,直接用=比较即可,示例代码:
SELECT id, fname, surname, CASE WHEN fname = 'matt' THEN 1 ELSE 0 END AS is_exact_match FROM table e ORDER BY is_exact_match DESC
内容的提问来源于stack exchange,提问作者Matt Bartlett
相关产品推荐
相关产品推荐

