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

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 が区切り文字列のみで構成される場合、区切り文字列の個数に応じた数の空文字列を返します

例​

  1. 基本的な文字列の分割
SELECT SPLIT_BY_STRING('hello', 'l');
+-------------------------------+
| SPLIT_BY_STRING('hello', 'l') |
+-------------------------------+
| ["he", "", "o"] |
+-------------------------------+
  1. 空の区切り文字列(文字単位で分割)
SELECT SPLIT_BY_STRING('hello', '');
+------------------------------+
| SPLIT_BY_STRING('hello', '') |
+------------------------------+
| ["h", "e", "l", "l", "o"] |
+------------------------------+
  1. 複数文字からなる区切り文字列
SELECT SPLIT_BY_STRING('apple::banana::cherry', '::');
+------------------------------------------------+
| SPLIT_BY_STRING('apple::banana::cherry', '::') |
+------------------------------------------------+
| ["apple", "banana", "cherry"] |
+------------------------------------------------+
  1. NULL 値の扱い
SELECT SPLIT_BY_STRING(NULL, ','), SPLIT_BY_STRING('hello', NULL);
+-----------------------------+----------------------------------+
| SPLIT_BY_STRING(NULL, ',') | SPLIT_BY_STRING('hello', NULL) |
+-----------------------------+----------------------------------+
| NULL | NULL |
+-----------------------------+----------------------------------+
  1. 空文字列の扱い
SELECT SPLIT_BY_STRING('', ','), SPLIT_BY_STRING('hello', 'xyz');
+---------------------------+----------------------------------+
| SPLIT_BY_STRING('', ',') | SPLIT_BY_STRING('hello', 'xyz') |
+---------------------------+----------------------------------+
| [] | ["hello"] |
+---------------------------+----------------------------------+
  1. 連続する区切り文字列
SELECT SPLIT_BY_STRING('a,,b,c', ',');
+-------------------------------+
| SPLIT_BY_STRING('a,,b,c', ',') |
+-------------------------------+
| ["a", "", "b", "c"] |
+-------------------------------+
  1. 先頭と末尾にある区切り文字列
SELECT SPLIT_BY_STRING(',a,b,', ',');
+------------------------------+
| SPLIT_BY_STRING(',a,b,', ',') |
+------------------------------+
| ["", "a", "b", ""] |
+------------------------------+
  1. 区切り文字列のみを含む場合
SELECT SPLIT_BY_STRING('|||', '|');
+----------------------------+
| SPLIT_BY_STRING('|||', '|') |
+----------------------------+
| ["", "", "", ""] |
+----------------------------+
  1. UTF-8 文字列の分割
SELECT SPLIT_BY_STRING('ṭṛì ḍḍumai ṭṛì', ' ');
+--------------------------------------+
| SPLIT_BY_STRING('ṭṛì ḍḍumai ṭṛì', ' ') |
+--------------------------------------+
| ["ṭṛì", "ḍḍumai", "ṭṛì"] |
+--------------------------------------+
  1. 存在しない区切り文字列
SELECT SPLIT_BY_STRING('hello world', 'xyz');
+--------------------------------------+
| SPLIT_BY_STRING('hello world', 'xyz') |
+--------------------------------------+
| ["hello world"] |
+--------------------------------------+

キーワード​

SPLIT_BY_STRING, SPLIT