跳到主要内容

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 中会被删除

示例

  1. 基本字符替换
SELECT TRANSLATE('abcd', 'a', 'z');
+-----------------------------+
| TRANSLATE('abcd', 'a', 'z') |
+-----------------------------+
| zbcd |
+-----------------------------+
  1. 多字符映射
SELECT TRANSLATE('abcd', 'ac', 'zx');
+------------------------------+
| TRANSLATE('abcd', 'ac', 'zx') |
+------------------------------+
| zbxd |
+------------------------------+
  1. 重复字符处理(只使用第一次映射),但 to 字符串中 y 映射的是 from 字符串的 c 字符.
SELECT TRANSLATE('abacad', 'aac', 'zxy');
+-----------------------------------+
| TRANSLATE('abacad', 'aac', 'zxy') |
+-----------------------------------+
| zbzyzd |
+-----------------------------------+
  1. 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 |
+----------------------------+------------------------------+------------------------------+
  1. 空字符串处理
SELECT TRANSLATE('', 'a', 'z'), TRANSLATE('abc', '', 'z'), TRANSLATE('abc', 'a', '');
+--------------------------+-----------------------------+-----------------------------+
| TRANSLATE('', 'a', 'z') | TRANSLATE('abc', '', 'z') | TRANSLATE('abc', 'a', '') |
+--------------------------+-----------------------------+-----------------------------+
| | abc | bc |
+--------------------------+-----------------------------+-----------------------------+
  1. to 字符串较短(删除多余字符)
SELECT TRANSLATE('abcde', 'ace', 'xy');
+-------------------------------+
| TRANSLATE('abcde', 'ace', 'xy') |
+-------------------------------+
| xbyd |
+-------------------------------+
  1. UTF-8 字符替换
SELECT TRANSLATE('ṭṛì ḍḍumai', 'ṭṛ', 'ab');
+-----------------------------------+
| TRANSLATE('ṭṛì ḍḍumai', 'ṭṛ', 'ab') |
+-----------------------------------+
| abì ḍḍumai |
+-----------------------------------+
  1. 数字字符替换
SELECT TRANSLATE('a1b2c3', '123', 'xyz');
+----------------------------------+
| TRANSLATE('a1b2c3', '123', 'xyz') |
+----------------------------------+
| axbycz |
+----------------------------------+
  1. 重复字符的复杂示例
SELECT TRANSLATE('aabbccaa', 'abab', 'xyuv');
+------------------------------------+
| TRANSLATE('aabbccaa', 'abab', 'xyuv') |
+------------------------------------+
| xxyyccxx |
+------------------------------------+
  1. 特殊符号替换
SELECT TRANSLATE('hello@world.com', '@.', '-_');
+--------------------------------------------+
| TRANSLATE('hello@world.com', '@.', '-_') |
+--------------------------------------------+
| hello-world_com |
+--------------------------------------------+