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

Nav*_*man 7 sql sql-server soundex

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

SELECT SOUNDEX('Smith'), SOUNDEX('Smythe');
----- ----- 
S530  S530  
Run Code Online (Sandbox Code Playgroud)

怎么'Smith'变成S530

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

Dmi*_*try 10

看看这篇文章

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

  • 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   ->   -
Run Code Online (Sandbox Code Playgroud)


Kyl*_*Mit 5

什么是 Soundex?

\n\n

声音指数是:

\n\n
\n

一种按英语发音对名称进行索引的语音算法;最初由 Robert C. Russell 和 Margaret King Odell 于 1918 年开发

\n
\n\n

它是如何工作的?

\n\n

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

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

这是jsFiddle中的交互式演示:

\n\n

jsFiddle 演示

\n\n

这里有一个使用SQL Fiddle的 SQL 演示

\n\n

在 SQL Server 中,SOUNDEX经常与 结合使用DIFFERENCE,用于计算结果数字中有多少相同(就像游戏主脑\xe2\x80\xa0),数字越大匹配最接近。

\n\n

策划者

\n\n

有哪些替代方案?

\n\n

重要的是要了解 soundex 的局限性和批评以及人们试图改进它的地方,特别是只植根于英语发音并且还丢弃了大量数据,导致更多误报

\n\n
\n\n

Metaphone和Double Metaphone仍然专注于英语发音,但为英语语音的细微差别添加了更多粒度即\xe2\x86\x92 )PHF

\n\n

Phil Factor用 SQL 编写了一个 Metaphone 函数,代码位于 github 上

\n\n
\n\n

Soundex 最常用于识别相似的名称,并且很难找到任何相似的昵称(即Robert\xe2\x86\x92RobBob)。根据关于人的常用姓名别名/昵称数据库的这个问题,您也可以在匹配过程中合并对类似昵称的查找。

\n\n

以下是一些常见昵称的免费列表:

\n\n\n\n

进一步阅读:

\n\n\n