に最終更新
SPLIT/SPLIT_BY_STRING
説明
SPLIT_BY_STRING 関数は、指定した区切り文字列で入力文字列を分割し、文字列の配列を返します。複数文字からなる区切り文字列を使用できます。空文字列の扱いは、他のデータベースの類似した関数と異なる場合があります。
構文
SPLIT_BY_STRING(<str>, <separator>)
パラメータ
| パラメータ | 説明 |
|---|---|
<str> | 分割対象の文字列。型: VARCHAR |
<separator> | 分割に使用する区切り文字列。型: VARCHAR |
戻り値
区切り文字列で分割した文字列の配列を、ARRAY
分割の規則:
- str 内の separator が現れる位置で分割します
- 区切り文字列が連続する場合、間に空文字列の要素ができます
- 文字列の先頭または末尾に区切り文字列がある場合、空文字列の要素ができます
特殊なケース:
- いずれかのパラメータが NULL の場合、NULL を返します
- str が空文字列の場合、空の配列
[]を返します - separator が空文字列の場合、str を文字単位で分割します(各文字が配列の要素になります)
- str に separator が含まれない場合、元の文字列だけを含む配列を返します
- str が区切り文字列のみで構成される場合、区切り文字列の個数に応じた数の空文字列を返します
例
- 基本的な文字列の分割
SELECT SPLIT_BY_STRING('hello', 'l');
+-------------------------------+
| SPLIT_BY_STRING('hello', 'l') |
+-------------------------------+
| ["he", "", "o"] |
+-------------------------------+
- 空の区切り文字列(文字単位で分割)
SELECT SPLIT_BY_STRING('hello', '');
+------------------------------+
| SPLIT_BY_STRING('hello', '') |
+------------------------------+
| ["h", "e", "l", "l", "o"] |
+------------------------------+
- 複数文字からなる区切り文字列
SELECT SPLIT_BY_STRING('apple::banana::cherry', '::');
+------------------------------------------------+
| SPLIT_BY_STRING('apple::banana::cherry', '::') |
+------------------------------------------------+
| ["apple", "banana", "cherry"] |
+------------------------------------------------+
- NULL 値の扱い
SELECT SPLIT_BY_STRING(NULL, ','), SPLIT_BY_STRING('hello', NULL);
+-----------------------------+----------------------------------+
| SPLIT_BY_STRING(NULL, ',') | SPLIT_BY_STRING('hello', NULL) |
+-----------------------------+----------------------------------+
| NULL | NULL |
+-----------------------------+----------------------------------+
- 空文字列の扱い
SELECT SPLIT_BY_STRING('', ','), SPLIT_BY_STRING('hello', 'xyz');
+---------------------------+----------------------------------+
| SPLIT_BY_STRING('', ',') | SPLIT_BY_STRING('hello', 'xyz') |
+---------------------------+----------------------------------+
| [] | ["hello"] |
+---------------------------+----------------------------------+
- 連続する区切り文字列
SELECT SPLIT_BY_STRING('a,,b,c', ',');
+-------------------------------+
| SPLIT_BY_STRING('a,,b,c', ',') |
+-------------------------------+
| ["a", "", "b", "c"] |
+-------------------------------+
- 先頭と末尾にある区切り文字列
SELECT SPLIT_BY_STRING(',a,b,', ',');
+------------------------------+
| SPLIT_BY_STRING(',a,b,', ',') |
+------------------------------+
| ["", "a", "b", ""] |
+------------------------------+
- 区切り文字列のみを含む場合
SELECT SPLIT_BY_STRING('|||', '|');
+----------------------------+
| SPLIT_BY_STRING('|||', '|') |
+----------------------------+
| ["", "", "", ""] |
+----------------------------+
- UTF-8 文字列の分割
SELECT SPLIT_BY_STRING('ṭṛì ḍḍumai ṭṛì', ' ');
+--------------------------------------+
| SPLIT_BY_STRING('ṭṛì ḍḍumai ṭṛì', ' ') |
+--------------------------------------+
| ["ṭṛì", "ḍḍumai", "ṭṛì"] |
+--------------------------------------+
- 存在しない区切り文字列
SELECT SPLIT_BY_STRING('hello world', 'xyz');
+--------------------------------------+
| SPLIT_BY_STRING('hello world', 'xyz') |
+--------------------------------------+
| ["hello world"] |
+--------------------------------------+
キーワード
SPLIT_BY_STRING, SPLIT