类别:

字符串和二进制函数

SOUNDEX

返回包含输入字符串的语音表示形式的字符串。

您可以使用此函数来确定两个字符串(例如,姓氏 LevineLavine、单词 totoo 等)在英语中是否具有相似的发音。

此函数使用 Soundex 语音算法 (https://www.archives.gov/research/census/soundex),Soundex 系统 (link removed) 中对此算法进行了描述。但请注意,Snowflake 没有为姓氏前缀(例如“Van”、“De”、“La”等)提供特殊处理。

SOUNDEX('Pfister') 返回 P236。由于前两个字母(Pf)相邻并共享相同的 Soundex 代码编号 (1),因此该函数会忽略第二个字母的 Soundex 代码编号。

某些数据库系统(例如 Teradata)使用一种变体,当第一个和第二个字母使用相同的数字时,该变体会保留第二个字母的 Soundex 代码编号。对于该变体,用于 Pfister 的字符串为 P123``(而不是 ``P236)。若要使用该变体,请改为调用 SOUNDEX_P123 函数。

另请参阅:

SOUNDEX_P123

语法

SOUNDEX( <varchar_expr> )
Copy

实参

varchar_expr

返回发音表示形式的字符串。字符串应使用拉丁文或 Unicode 字符集。

返回

返回的值为包含输入字符串的发音表示形式的 VARCHAR。换句话说,返回值是一个字符串(不是发音),表示输入字符串的发音(而不是拼写)。

请注意以下事项:

  • 返回的值以一个字母开头,该字母表示字符串中的第一个字母,后跟 3 位数字(例如 s400c130)。

    有关如何计算返回值的更多信息,请参阅 Soundex 语音算法 (link removed) (在 Wikipedia 中)。

  • 如前所述,如果要在第一个字母和第二个字母使用相同的数字时使用保留第二个字母的 Soundex 代码编号的变体,请改为调用 SOUNDEX_P123 函数。

使用说明

  • 由于该函数仅返回四个字符(一个字母和三个数字),因此输出主要由输入的前几个音节确定,而不是整个字符串。

    例如,以下语句比较三个字符串,并为每个字符串返回相同的 SOUNDEX 值,因为即使它们的拼写和含义完全不同,但它们以发音相似的音节开头:

    SELECT SOUNDEX('I love rock and roll music.'),
           SOUNDEX('I love rocks and gemstones.'),
           SOUNDEX('I leave a rock wherever I go.');
    +----------------------------------------+--------------------------+------------------------------------------+
    | SOUNDEX('I LOVE ROCK AND ROLL MUSIC.') | SOUNDEX('I LOVE ROCKS.') | SOUNDEX('I LEAVE A ROCK WHEREVER I GO.') |
    |----------------------------------------+--------------------------+------------------------------------------|
    | I416                                   | I416                     | I416                                     |
    +----------------------------------------+--------------------------+------------------------------------------+
    
    Copy

示例

以下查询返回两个名称的 SOUNDEX 值,这两个名称拼写不同,但通常发音相似:

SELECT SOUNDEX('Marks'), SOUNDEX('Marx');
+------------------+-----------------+
| SOUNDEX('MARKS') | SOUNDEX('MARX') |
|------------------+-----------------|
| M620             | M620            |
+------------------+-----------------+
Copy

以下查询演示如何使用 SOUNDEX 在不同表中查找可能相关的行:

创建并加载表:

CREATE TABLE sounding_board (v VARCHAR);
CREATE TABLE sounding_bored (v VARCHAR);
INSERT INTO sounding_board (v) VALUES ('Marsha');
INSERT INTO sounding_bored (v) VALUES ('Marcia');
Copy

在不使用 SOUNDEX 的情况下查找相关记录:

SELECT * 
    FROM sounding_board AS board, sounding_bored AS bored 
    WHERE bored.v = board.v;
+---+---+
| V | V |
|---+---|
+---+---+
Copy

使用 SOUNDEX 查找相关记录:

SELECT * 
    FROM sounding_board AS board, sounding_bored AS bored 
    WHERE SOUNDEX(bored.v) = SOUNDEX(board.v);
+--------+--------+
| V      | V      |
|--------+--------|
| Marsha | Marcia |
+--------+--------+
Copy
语言: 中文