に最終更新
REPLACE_EMPTY
説明
REPLACE_EMPTY 関数は、文字列内の一部の文字を別の文字に置き換えます。REPLACE 関数とは異なり、old が空文字列の場合は、new を str の各文字の前と str の末尾に挿入します。
この関数は主に Presto および Trino との互換性のために使用され、その動作は Presto および Trino の REPLACE() 関数と完全に同じです。バージョン 2.1.5 以降でサポートされています。
構文
REPLACE_EMPTY ( <str>, <old>, <new> )
パラメータ
| パラメータ | 説明 |
|---|---|
<str> | 置換対象の文字列。 |
<old> | 置換する部分文字列。<old> が <str> に含まれない場合、置換は行われません。<old> が空文字列の場合、str 文字列の各文字の前に <new> を挿入します。 |
<new> | <old> の置換に使用する新しい部分文字列。 |
戻り値
部分文字列を置換した後の新しい文字列を VARCHAR 型で返します。特殊なケース:
- いずれかの引数が NULL の場合は、NULL を返します。
<old>が空文字列の場合は、<new>を<str>の各文字の前と末尾に挿入した文字列を返します。<old>が<str>に含まれない場合は、<str>をそのまま返します。
例
参考として、REPLACE は <old> が現れる箇所をすべて置き換え、文字列の残りの部分は変更しません。
SELECT replace('hello world', 'world', 'universe');
+---------------------------------------------+
| replace('hello world', 'world', 'universe') |
+---------------------------------------------+
| hello universe |
+---------------------------------------------+
REPLACE_EMPTY は通常の置換では同じように動作します(下の例 2 を参照)。ただし、<old> が空文字列の場合は異なり、<new> を <str> の各文字の前と末尾に挿入します(例 1)。残りの例では特殊なケースを示します。
- 基本的な使い方:
<old>が空文字列の場合の挿入動作。
SELECT replace_empty('abc', '', 'x');
+-------------------------------+
| replace_empty('abc', '', 'x') |
+-------------------------------+
| xaxbxcx |
+-------------------------------+
- 通常の部分文字列の置換(
REPLACEと同じ動作)。
SELECT replace_empty('hello', 'l', 'L');
+----------------------------------+
| replace_empty('hello', 'l', 'L') |
+----------------------------------+
| heLLo |
+----------------------------------+
<str>と<old>がどちらも空文字列の場合。
SELECT replace_empty('', '', 'x');
+----------------------------+
| replace_empty('', '', 'x') |
+----------------------------+
| x |
+----------------------------+
- NULL の伝播。
SELECT replace_empty(NULL, 'old', 'new');
+-----------------------------------+
| replace_empty(NULL, 'old', 'new') |
+-----------------------------------+
| NULL |
+-----------------------------------+
- マルチバイト(UTF-8)の
<new>を使用する場合。
SELECT replace_empty('hello', 'l', 'ṭṛìṭ');
+--------------------------------------------+
| replace_empty('hello', 'l', 'ṭṛìṭ') |
+--------------------------------------------+
| heṭṛìṭṭṛìṭo |
+--------------------------------------------+