に最終更新
REPLACE
説明
REPLACE 関数は、文字列内にある指定した部分文字列をすべて新しい部分文字列に置き換えます。一致する部分文字列を文字列全体にわたって置換します。
REPLACE_EMPTY 関数との違い:
REPLACE()は指定した部分文字列を置換します。空文字列も指定できますREPLACE_EMPTY()は、空の値または空文字列を指定した値に置き換えるために使用します
構文
REPLACE(<str>, <old>, <new>)
パラメータ
| パラメータ | 説明 |
|---|---|
<str> | 置換対象の文字列。型: VARCHAR |
<old> | 置換する部分文字列。str 内に見つからない場合、置換は行われません。型: VARCHAR |
<new> | old の代わりに使用する新しい部分文字列。型: VARCHAR |
戻り値
置換後の文字列を VARCHAR 型で返します。
置換の規則:
- 文字列内で一致する old のすべての出現箇所を置換します
- 大文字と小文字を区別します
- old が空文字列の場合、元の文字列を返します(置換は行われません)
- new が空文字列の場合、一致する old のすべての出現箇所を削除します
特殊なケース:
- いずれかのパラメータが NULL の場合、NULL を返します
- str が空文字列の場合、空文字列を返します
- old が空文字列の場合、元の str を返します(置換は行われません)
- str 内に old が見つからない場合、元の str を返します
使用例
- 基本的な置換
SELECT REPLACE('hello world', 'world', 'universe');
+---------------------------------------------+
| REPLACE('hello world', 'world', 'universe') |
+---------------------------------------------+
| hello universe |
+---------------------------------------------+
- 複数の一致箇所を置換
SELECT REPLACE('apple apple apple', 'apple', 'orange');
+------------------------------------------------+
| REPLACE('apple apple apple', 'apple', 'orange') |
+------------------------------------------------+
| orange orange orange |
+------------------------------------------------+
- 部分文字列を削除(空文字列に置換)
SELECT REPLACE('banana', 'a', '');
+---------------------------+
| REPLACE('banana', 'a', '') |
+---------------------------+
| bnn |
+---------------------------+
- NULL 値の扱い
SELECT REPLACE(NULL, 'old', 'new'), REPLACE('test', NULL, 'new'), REPLACE('test', 'old', NULL);
+------------------------------+------------------------------+------------------------------+
| REPLACE(NULL, 'old', 'new') | REPLACE('test', NULL, 'new') | REPLACE('test', 'old', NULL) |
+------------------------------+------------------------------+------------------------------+
| NULL | NULL | NULL |
+------------------------------+------------------------------+------------------------------+
- UTF-8 文字の置換
SELECT REPLACE('ṭṛì ḍḍumai test ṭṛì ḍḍumannàri', 'ṭṛì', 'replaced');
+-----------------------------------------------------------+
| REPLACE('ṭṛì ḍḍumai test ṭṛì ḍḍumannàri', 'ṭṛì', 'replaced') |
+-----------------------------------------------------------+
| replaced ḍḍumai test replaced ḍḍumannàri |
+-----------------------------------------------------------+
- 空文字列を指定した場合: 空の
strは空文字列を返し、空のoldはstrをそのまま返し、空のnewは一致箇所をすべて削除します
SELECT REPLACE('', 'old', 'new'), REPLACE('test', '', 'new'), REPLACE('test', 'old', '');
+---------------------------+----------------------------+----------------------------+
| REPLACE('', 'old', 'new') | REPLACE('test', '', 'new') | REPLACE('test', 'old', '') |
+---------------------------+----------------------------+----------------------------+
| | test | test |
+---------------------------+----------------------------+----------------------------+
- 大文字と小文字を区別する置換(小文字の
helloのみ一致)
SELECT REPLACE('Hello HELLO hello', 'hello', 'hi');
+---------------------------------------------+
| REPLACE('Hello HELLO hello', 'hello', 'hi') |
+---------------------------------------------+
| Hello HELLO hi |
+---------------------------------------------+
oldが存在しない場合:strをそのまま返します
SELECT REPLACE('hello world', 'xyz', 'abc');
+--------------------------------------+
| REPLACE('hello world', 'xyz', 'abc') |
+--------------------------------------+
| hello world |
+--------------------------------------+
- 重複しない箇所での繰り返し置換
SELECT REPLACE('123123123', '123', 'ABC');
+------------------------------------+
| REPLACE('123123123', '123', 'ABC') |
+------------------------------------+
| ABCABCABC |
+------------------------------------+