TRANSLATE
描述
TRANSLATE 函数用于字符串替换,将源字符串中的字符按照映射规则进行逐字符转换。该函数会将源字符串中出现在 from 字符串中的每个字符替换为 to 字符串中对应位置的字符。
语法
TRANSLATE(<source>, <from>, <to>)
参数
| 参数 | 说明 |
|---|---|
<source> | 需要进行转换的源字符串。类型:VARCHAR |
<from> | 要被替换的字符集合,定义映射规则的源字符。类型:VARCHAR |
<to> | 替换后的字符集合,定义映射规则的目标字符。类型:VARCHAR |
返回值
返回 VARCHAR 类型,表示按照字符映射规则转换后的字符串。
字符映射规则:
- 按照 from 和 to 字符串的位置建立一对一的字符映射关系
- from 第1个字符映射到 to 第1个字符,from 第2个字符映射到 to 第2个字符,依此类推
- 如果 from 字符串中有重复字符,优先使用第一次出现的映射规则,忽略后续重复出现的字符
- 源字符串中不在 from 字符串中的字符保持不变
特殊情况:
- 如果任意参数为 NULL,返回 NULL
- 如果 source 为空字符串,返回空字符串
- 如果 from 为空字符串,返回原 source 字符串
- 如果 to 为空字符串,删除 source 中所有在 from 中出现的字符
- 如果 to 字符串长度小于 from,超出部分的 from 字符在 source 中会被删除
示例
- 基本字符替换
SELECT TRANSLATE('abcd', 'a', 'z');
+-----------------------------+
| TRANSLATE('abcd', 'a', 'z') |
+-----------------------------+
| zbcd |
+-----------------------------+
- 多字符映射
SELECT TRANSLATE('abcd', 'ac', 'zx');
+------------------------------+
| TRANSLATE('abcd', 'ac', 'zx') |
+------------------------------+
| zbxd |
+------------------------------+
- 重复字符处理(只使用第一次映射),但 to 字符串中 y 映射的是 from 字符串的 c 字符.
SELECT TRANSLATE('abacad', 'aac', 'zxy');
+-----------------------------------+
| TRANSLATE('abacad', 'aac', 'zxy') |
+-----------------------------------+
| zbzyzd |
+-----------------------------------+
- NULL 值处理
SELECT TRANSLATE(NULL, 'a', 'z'), TRANSLATE('abc', NULL, 'z'), TRANSLATE('abc', 'a', NULL);
+----------------------------+------------------------------+------------------------------+
| TRANSLATE(NULL, 'a', 'z') | TRANSLATE('abc', NULL, 'z') | TRANSLATE('abc', 'a', NULL) |
+----------------------------+------------------------------+------------------------------+
| NULL | NULL | NULL |
+----------------------------+------------------------------+------------------------------+
- 空字符串处理
SELECT TRANSLATE('', 'a', 'z'), TRANSLATE('abc', '', 'z'), TRANSLATE('abc', 'a', '');
+--------------------------+-----------------------------+-----------------------------+
| TRANSLATE('', 'a', 'z') | TRANSLATE('abc', '', 'z') | TRANSLATE('abc', 'a', '') |
+--------------------------+-----------------------------+-----------------------------+
| | abc | bc |
+--------------------------+-----------------------------+-----------------------------+
- to 字符串较短(删除多余字符)
SELECT TRANSLATE('abcde', 'ace', 'xy');
+-------------------------------+
| TRANSLATE('abcde', 'ace', 'xy') |
+-------------------------------+
| xbyd |
+-------------------------------+
- UTF-8 字符替换
SELECT TRANSLATE('ṭṛì ḍḍumai', 'ṭṛ', 'ab');
+-----------------------------------+
| TRANSLATE('ṭṛì ḍḍumai', 'ṭṛ', 'ab') |
+-----------------------------------+
| abì ḍḍumai |
+-----------------------------------+
- 数字字符替换
SELECT TRANSLATE('a1b2c3', '123', 'xyz');
+----------------------------------+
| TRANSLATE('a1b2c3', '123', 'xyz') |
+----------------------------------+
| axbycz |
+----------------------------------+
- 重复字符的复杂示例
SELECT TRANSLATE('aabbccaa', 'abab', 'xyuv');
+------------------------------------+
| TRANSLATE('aabbccaa', 'abab', 'xyuv') |
+------------------------------------+
| xxyyccxx |
+------------------------------------+
- 特殊符号替换
SELECT TRANSLATE('hello@world.com', '@.', '-_');
+--------------------------------------------+
| TRANSLATE('hello@world.com', '@.', '-_') |
+--------------------------------------------+
| hello-world_com |
+--------------------------------------------+