在学习文本函数的时候,碰到了这样一个函数
Soundex()
这个函数是返回串的Soundex值,那什么是Soundex值呢?
Soundex 是一种 20 世纪在美国人口普查中归档姓氏的方法。它把听起来相似的姓氏归在一起,使得在即便错误拼写的情况下调查者仍能查找到。 Soundex 今天仍然因差不多的原因被应用着,当然现在用计算机数据库服务器了。 大部分的数据库服务器都有 Soundex 函数。
Soundex算法是一种语音算法,利用英文字的读音计算近似值,值由四个字符构成,第一个字符为英文字母,后三个为数字。在拼音文字中有时会有会念但不能拼出正确字的情形,可用Soundex做类似模糊匹配的效果。例如Knuth和Kant二个字符串,它们的Soundex值都是 K530。
那么如何得出串的Soundex值呢?
其实Soundex()函数的算法是这样的:
1.对于串中的字符,先保留第一个字符并大写,接着对剩下的字符实行如下的转换:
a e h i o u w y 换成 0
b f p v 换成 1
c g j k q s x z 换成 2
d t 换成 3
l 换成 4
m n 换成 5
r 换成 6
例如hello实行第一部后得到的结果是H0440。
2.把第一步得到的结果去掉0,对于紧挨着并且重复的字符只保留一个。
例如第一步得到的H0440就变成了H4。
3.返回至少四个字符(多于四个字符全部返回),不足四位的补0
则hello的Soundex值为H400。
再例如quaddratically,经过第一步变成Q003603020440,经过第二步变成Q36324(虽然有两个3,但是没有紧挨着),第三步,Q36324大于四个字符,则全部返回,则quaddratically的soundex值是Q36324。
在数据库的处理中为什么会需要Soundex( )函数呢?
假设对于某个数据,本来的内容是Y.Lie,但是由于输入错误,输成了Y.Lee,这个时候我们就可以使用Soundex()函数。
例如在第一个例子中我们查找Y.Lie,但是没有检索结果,因为Y.Lie 和Y.Lee发音相似。如果我们找和Y.Lie的Soundex值相同的列,就很有可能检索出我们想要的结果的结果。