您是否知道为什么 SOUNDEX 无法使用NUMBERS作为字符串?
这些查询工作正常:
select 1 from dual
where soundex('for you') = soundex('for u')
;
select 1 from dual
where soundex('for you') = soundex('for you')
;
但这个没有:
select 1 from dual
where soundex('6000') = soundex('6000')
;
select 1 from dual
where soundex('5') = soundex('5')
;
我正在阅读文档http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions167.htm#SQLRF06109,但没有提到一些有用的文章。
答案 0 :(得分:3)
soundex算法专门开发用于根据名称的声音而不是使用的确切拼写来匹配名称。它基本上通过将字母串映射到主要包含其辅音的短字符串来工作。通过soundex算法将完全忽略数字数字(例如从字符串中去除)。
您需要一种不同的策略来对数字字符串进行近似匹配。
答案 1 :(得分:1)
添加到响应中,它将采用一个字母并根据它们的声音分配值。它不会占用数字,在这个过程中不会被考虑,这就是它无法工作的原因。
您仍然可以使用其他算法(如Levenshtein距离)来比较被视为字符串的数字并获得良好的结果。
https://en.wikipedia.org/wiki/Levenshtein_distance
在Oracle SQL中,您可以使用" utl_match"。
答案 2 :(得分:-1)
Soundex函数返回的语音听起来与英语相似,并且在语音上彼此相似
例如,“peek”和“pick”在语音上是相似的单词,因此如果您查询两者中的任何一个,soundex将带来两个结果。
soundex的算法从第一步中的单词中删除元音,如果是数字则不会。但是可以绕过这一步。
现在第二步涉及以下面的方式将数字分配给字母:
v = 1 | c,g,j,k,q,s,x,z = 2 | d,t = 3 | l = 4 | m,n = 5 | r = 6 |
根据算法,不能将数值赋给soundex函数中作为字符串传递的数字。
因此soundex对于数字作为字符串失败,但适用于传递给它的字符值。
Courtsey:Oraclemine.com