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