メインコンテンツまでスキップ
に最終更新

TRANSLATE

説明​

TRANSLATE 関数は、文字の対応付け規則に従って、元の文字列を一文字ずつ置換します。元の文字列に含まれる各文字が 'from' 文字列にあれば、'to' 文字列の同じ位置にある文字に置換します。

構文​

TRANSLATE(<source>, <from>, <to>)

パラメータ​

パラメータ説明
<source>変換する元の文字列。型: VARCHAR
<from>置換対象の文字の集合。型: VARCHAR
<to>置換後の文字の集合。型: VARCHAR

戻り値​

文字の対応付け規則に従って変換した文字列を VARCHAR 型で返します。

文字の対応付け規則:

  • 'from' と 'to' の各文字の位置に基づいて、一対一の対応付けを行います。
  • 'from' の 1 文字目は 'to' の 1 文字目に、2 文字目は 2 文字目に対応付けます。以降も同様です。
  • 'from' に同じ文字が複数ある場合、最初に現れた文字の対応付けを使用し、それ以降の重複は無視します。
  • 元の文字列のうち 'from' にない文字は変更しません。

特殊なケース:

  • いずれかの引数が NULL の場合は、NULL を返します。
  • 元の文字列が空文字列の場合は、空文字列を返します。
  • 'from' が空文字列の場合は、元の文字列をそのまま返します。
  • 'to' が空文字列の場合は、元の文字列から 'from' に含まれる文字をすべて削除します。
  • 'to' が 'from' より短い場合は、'from' の余った文字に対応する元の文字列中の文字を削除します。

例​

  1. 基本的な文字の置換
SELECT TRANSLATE('abcd', 'a', 'z');
+-----------------------------+
| TRANSLATE('abcd', 'a', 'z') |
+-----------------------------+
| zbcd |
+-----------------------------+
  1. 元の文字列に含まれる対象文字をすべて置換
SELECT TRANSLATE('abcda', 'a', 'z');
+------------------------------+
| TRANSLATE('abcda', 'a', 'z') |
+------------------------------+
| zbcdz |
+------------------------------+
  1. 複数の文字を位置に基づいて対応付け
SELECT TRANSLATE('abcd', 'ac', 'zx');
+-------------------------------+
| TRANSLATE('abcd', 'ac', 'zx') |
+-------------------------------+
| zbxd |
+-------------------------------+
  1. <from> に重複する文字がある場合(最初の対応付けのみを使用)
SELECT TRANSLATE('abacad', 'aac', 'zxy');
+-----------------------------------+
| TRANSLATE('abacad', 'aac', 'zxy') |
+-----------------------------------+
| zbzyzd |
+-----------------------------------+
  1. <to> が <from> より短い場合(余った文字は削除)
SELECT TRANSLATE('abcde', 'ace', 'xy');
+---------------------------------+
| TRANSLATE('abcde', 'ace', 'xy') |
+---------------------------------+
| xbyd |
+---------------------------------+
  1. NULL の処理: いずれかの引数が NULL なら 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. 空文字列の特殊なケース: 元の文字列が空なら空文字列を返し、空の <from> は元の文字列を変更せず、空の <to> は該当する文字を削除する
SELECT TRANSLATE('', 'a', 'z'), TRANSLATE('abc', '', 'z'), TRANSLATE('abc', 'a', '');
+-------------------------+---------------------------+---------------------------+
| TRANSLATE('', 'a', 'z') | TRANSLATE('abc', '', 'z') | TRANSLATE('abc', 'a', '') |
+-------------------------+---------------------------+---------------------------+
| | abc | bc |
+-------------------------+---------------------------+---------------------------+
  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 |
+------------------------------------------+

キーワード​

TRANSLATE