Soundex函数如何在SQL Server中运行?

时间:2011-09-03 20:51:29

标签: sql sql-server soundex

以下是SQL中Soundex代码的示例:

SELECT SOUNDEX('Smith'), SOUNDEX('Smythe');
----- ----- 
S530  S530  

'Smith'如何成为S530

在这个例子中,第一个数字是S,因为这是输入表达式中的第一个字符,但是如何计算剩余的三个数字?

2 个答案:

答案 0 :(得分:10)

看看这个article

  

代码的第一个字母对应于第一个字母   名称。代码的其余部分由三个数字派生而来   根据以下代码的单词的音节:

     
      
  • 1 = B,F,P,V
  •   
  • 2 = C,G,J,K,Q,S,X,Z
  •   
  • 3 = D,T
  •   
  • 4 = L
  •   
  • 5 = M,N
  •   
  • 6 = R
  •   
     

具有相同Soundex代码的双字母,A,E,I,O,U,H,W,Y,   一些前缀被忽视......

因此,对于Smith和Smythe,代码是这样创建的:

S  S   ->   S
m  m   ->   5
i  y   ->   0
t  t   ->   3
h  h   ->   0
   e   ->   -

答案 1 :(得分:0)

什么是Soundex?

Soundex是:

  

一种语音算法,用于通过声音将名称编​​入索引,用英语 发音;由罗伯特·罗素(Robert C. Russell)和玛格丽特·金·奥德尔(Margaret King Odell)于1918年首次开发

它如何工作?

Soundex有几种实现,但是大多数实现以下步骤:

  1. 保留名称的首字母,并删除所有其他出现的元音和h,w
    |a, e, i, o, u, y, h, w | → "" |
  2. 用以下数字代替辅音(在第一个字母之后):
    | b, f, p, v | → 1 |
    | c, g, j, k, q, s, x, z | → 2 |
    | d, t | → 3 |
    | l | → 4 |
    | m, n | → 5 |
    | r | → 6 |
  3. 将相同的相邻数字替换为单个值(如果在步骤1之前彼此相邻,则将它们替换为):
    | M33 | → M3 |
  4. 剪切 Pad 用零或剪切以产生4位数的结果:
    | M3 | → M300 |
    | M34123 | → M341 |

这是jsFiddle中的一个交互式演示:

jsFiddle Demo

这是使用SQL Fiddle

的SQL演示

在SQL Server中,SOUNDEX通常与DIFFERENCE结合使用,Mastermind用于对结果位数进行计分(就像游戏mastermind ),数字匹配程度最高。

discards a lot of data, resulting in more false positives

有哪些替代方案?

重要的是要了解soundex的局限性和批评,以及人们在何处尝试对其进行改进,尤其是扎根于英语发音以及Metaphone


Double Metaphonenuances of speech in Enlgish仍然都专注于英语发音,但是为Metaphone Function in SQL(即PHF)增加了更多的粒度

Phil Factor用source on github写了Database of common name aliases / nicknames of people


Soundex通常用于识别相似的名字,要找到任何相似的昵称(例如RobertRob或{{1 }})。根据{{​​3}}上的这个问题,您也可以在匹配过程中针对相似的昵称进行查找。

以下是几个免费的常用昵称列表:

进一步阅读: