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

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)。残りの例では特殊なケースを示します。

  1. 基本的な使い方: <old> が空文字列の場合の挿入動作。
SELECT replace_empty('abc', '', 'x');
+-------------------------------+
| replace_empty('abc', '', 'x') |
+-------------------------------+
| xaxbxcx |
+-------------------------------+
  1. 通常の部分文字列の置換(REPLACE と同じ動作)。
SELECT replace_empty('hello', 'l', 'L');
+----------------------------------+
| replace_empty('hello', 'l', 'L') |
+----------------------------------+
| heLLo |
+----------------------------------+
  1. <str> と <old> がどちらも空文字列の場合。
SELECT replace_empty('', '', 'x');
+----------------------------+
| replace_empty('', '', 'x') |
+----------------------------+
| x |
+----------------------------+
  1. NULL の伝播。
SELECT replace_empty(NULL, 'old', 'new');
+-----------------------------------+
| replace_empty(NULL, 'old', 'new') |
+-----------------------------------+
| NULL |
+-----------------------------------+
  1. マルチバイト(UTF-8)の <new> を使用する場合。
SELECT replace_empty('hello', 'l', 'ṭṛìṭ');
+--------------------------------------------+
| replace_empty('hello', 'l', 'ṭṛìṭ') |
+--------------------------------------------+
| heṭṛìṭṭṛìṭo |
+--------------------------------------------+