Oracle SOUNDEX() 函数使用指南

Oracle SOUNDEX() 是一个内置函数,它返回一个表示给定英语字符串发音的字符串。

Soundex 是一种语音算法。如果两个单词听起来相同,则它们应具有相同的 Soundex 字符串。

Oracle SOUNDEX() 语法

这里是 Oracle SOUNDEX() 函数的语法:

SOUNDEX(str)

参数

str

必需的。它可以是 CHAR, VARCHAR2, NCHAR, 或者 NVARCHAR2 中的任何一种数据类型。

返回值

Oracle SOUNDEX() 函数返回一个表示给定英语字符串发音的字符串。

如果参数为 NULL 或者空字符串时, SOUNDEX() 将返回 NULL

Soundex 算法

Soundex 语音表示在 Donald E. Knuth 的 The Art of Computer Programming, Volume 3: Sorting and Searching 中定义如下:

  1. 保留字符串的第一个字母并删除所有其他出现的以下字母:a、e、h、i、o、u、w、y。

  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 之前),或者除了任何中间的 h 和 w 之外相邻,则保留第一个字母并省略所有具有相同数字的相邻字母的其余部分。

  4. 返回用 0 填充的前四个字节。

Oracle SOUNDEX() 示例

这里有几个展示了 Oracle SOUNDEX() 函数用法的示例。

基本用法

SELECT
    SOUNDEX('Hello'),
    SOUNDEX('World')
FROM dual;

输出:

SOUNDEX('HELLO')    SOUNDEX('WORLD')
___________________ ___________________
H400                W643

读音相同

如果两个单词听起来相同,则它们应具有相同的 Soundex 字符串。

SELECT
    SOUNDEX('Dam') "Dam",
    SOUNDEX('Damn') "Damn"
FROM dual;

输出:

Dam     Damn
_______ _______
D500    D500

在本示例中,Dam 和 Damn 的读音相同,因此它们返回了相同的字符串。 让我们再看几个读音相同的单词的示例:

SELECT
    SOUNDEX('Too') "Too",
    SOUNDEX('Two') "Two",
    SOUNDEX('Color') "Color",
    SOUNDEX('Colour') "Colour"
FROM dual;

输出:

Too     Two     Color    Colour
_______ _______ ________ _________
T000    T000    C460     C460

NULL 参数

如果参数为 NULL 或者空字符串时, SOUNDEX() 将返回 NULL

SET NULL 'NULL';
SELECT
    SOUNDEX(NULL),
    SOUNDEX('')
FROM dual;

输出:

SOUNDEX(NULL)    SOUNDEX('')
________________ ______________
NULL             NULL

在本示例中,我们使用 SET NULL 'NULL'; 语句将 NULL 值显示为 'NULL' 字符串。

结论

Oracle SOUNDEX() 是一个内置函数,它返回一个表示给定字符串发音的 soundex 字符串。