0

您知道为什么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但没有提到一些有用的。

4

3 回答 3

3

soundex 算法是专门开发的,用于根据名称的发音而不是使用的确切拼写来匹配名称。它基本上是通过将字母串映射到主要包含其辅音的短串来工作的。soundex 算法将完全忽略数字数字(例如从字符串中删除)。

您将需要一种不同的策略来对数字字符串进行近似匹配。

于 2012-09-20T19:39:00.460 回答
1

添加到响应中,它将接受一个字母并根据它们的发音方式分配一个值。它不需要数字,在此过程中不考虑它们,这就是它不起作用的原因。

您仍然可以使用其他算法(例如 Levenshtein 距离)来比较被视为字符串的数字,并获得良好的结果。

https://en.wikipedia.org/wiki/Levenshtein_distance

在 Oracle SQL 中,您可以使用“utl_match”。

于 2015-10-22T14:13:45.150 回答
-1

Soundex 函数返回在英语中听起来相似并且在语音上彼此相似的字符串

例如,“peek”和“pick”是发音相似的词,因此如果您查询两者中的任何一个,soundex 都会带来两个结果。

soundex 算法在第一步中从单词中删除元音,在数字的情况下将什么都没有。但是这一步可以绕过。

现在第二步涉及以下列方式将数字分配给字母:

v = 1 | c, g, j, k, q, s, x, z = 2 | d, t = 3 | l = 4 | 米,n = 5 | r = 6 |

根据该算法,不能为 soundex 函数中作为字符串传递的数字分配数值。

因此,soundex 无法将数字作为字符串,但适用于传递给它的字符值。

礼貌:Oraclemine.com

http://oraclemine.com/soundex-function-oracle/

于 2016-03-28T19:56:25.597 回答