跳到主要内容

SOUNDEX

描述

SOUNDEX 函数用于计算美国 Soundex 值,其中包括第一个字母,后跟一个 3 位数字的声音编码 该编码表示用户指定的字符串的英语发音。

该函数会忽略所有字符串中的非字母字符。

语法

SOUNDEX ( <expr> )

参数

参数说明
<expr>需要计算的字符串,仅接受 ASCII 字符。

返回值

返回一个 VARCHAR(4) 字符串,其中包括一个大写字母,后跟代表英语发音的三位数字声音编码。

如果字符串为空,或字符串中不含任何字母字符,则返回空字符串。

如果待处理的字符串包含非 ASCII 字符,函数将在计算过程中抛出异常。

输入为 NULL 时返回 NULL。

举例

下格模拟了一个名字列表。

CREATE TABLE IF NOT EXISTS soundex_test (
name VARCHAR(20)
) DISTRIBUTED BY HASH(name) BUCKETS 1
PROPERTIES ("replication_num" = "1");

INSERT INTO soundex_test (name) VALUES
('Doris'),
('Smith'), ('Smyth'),
('H'), ('P'), ('Lee'),
('Robert'), ('R@b-e123rt'),
('123@*%'), (''),
('Ashcraft'), ('Honeyman'), ('Pfister'), (NULL);
SELECT name, soundex(name) AS IDX FROM soundex_test;
+------------+------+
| NULL | NULL |
| | |
| 123@*% | |
| Ashcraft | A261 |
| Doris | D620 |
| H | H000 |
| Honeyman | H555 |
| Lee | L000 |
| P | P000 |
| Pfister | P236 |
| R@b-e123rt | R163 |
| Robert | R163 |
| Smith | S530 |
| Smyth | S530 |
+------------+------+

对非 ASCII 码的行为:

  • Doris 在逐字符处理输入字符串时,如果在完成计算之前遇到非 ASCII 字符,会立即抛出错误,示例如下:
SELECT SOUNDEX('你好');
-- ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[INVALID_ARGUMENT]soundex only supports ASCII
-- 在处理完 `Doris` 后得到 D62(还缺一位数字,未构成完整的 4 字符编码)
-- 读到非 ASCII 字符 `你` 后,函数报错
SELECT SOUNDEX('Doris 你好');
-- ERROR 1105 (HY000): errCode = 2, detailMessage = (127.0.0.1)[INVALID_ARGUMENT]soundex only supports ASCII
SELECT SOUNDEX('Apache Doris 你好');
+--------------------------------+
| SOUNDEX('Apache Doris 你好') |
+--------------------------------+
| A123 |
+--------------------------------+