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

SPLIT_BY_REGEXP/REGEXP_SPLIT_TO_ARRAY

説明​

SPLIT_BY_REGEXP 関数は、指定した正規表現パターンに基づいて文字列を文字列の配列に分割します。SPLIT_BY_STRING とは異なり、複雑な正規表現によるマッチングに対応しているため、より柔軟な分割規則を指定できます。分割数の上限も任意で指定でき、構造化テキストの処理、データクレンジング、パターンマッチングに役立ちます。

構文​

SPLIT_BY_REGEXP(<str>, <pattern> [, <max_limit>])

パラメータ​

パラメータ説明
<str>分割する元の文字列。型: VARCHAR
<pattern>区切り文字として使用する正規表現パターン。型: VARCHAR
<max_limit>省略可能。返される配列の要素数の上限を指定します。型: INT

戻り値​

正規表現で分割した文字列の配列を表す ARRAY 型の値を返します。

分割規則:

  • 正規表現パターンに一致した位置で分割します
  • 標準的な正規表現構文を使用できます
  • パターンが空文字列の場合、文字列を一文字ずつ分割します
  • パターンがどこにも一致しない場合、元の文字列のみを含む一要素の配列を返します
  • max_limit は結果の配列の最大要素数を制限します

特殊なケース:

  • いずれかのパラメータが NULL の場合、NULL を返します
  • 文字列が空の場合、空文字列を含む一要素の配列を返します
  • 正規表現が空文字列の場合、一文字ずつ分割します
  • max_limit が 0 以下の場合、上限は適用されません
  • 連続して一致すると、空文字列の要素が生じます

例​

  1. 空のパターンによる文字単位の分割
SELECT SPLIT_BY_REGEXP('abcde', '');
+------------------------------+
| SPLIT_BY_REGEXP('abcde', '') |
+------------------------------+
| ["a", "b", "c", "d", "e"] |
+------------------------------+
  1. 数字のパターンによる分割
SELECT SPLIT_BY_REGEXP('a12bc23de345f', '\\d+');
+-----------------------------------------+
| SPLIT_BY_REGEXP('a12bc23de345f', '\d+') |
+-----------------------------------------+
| ["a", "bc", "de", "f"] |
+-----------------------------------------+
  1. NULL 値の処理
SELECT SPLIT_BY_REGEXP(NULL, '\\d+'), SPLIT_BY_REGEXP('test', NULL);
+--------------------------------+--------------------------------+
| SPLIT_BY_REGEXP(NULL, '\d+') | SPLIT_BY_REGEXP('test', NULL) |
+--------------------------------+--------------------------------+
| NULL | NULL |
+--------------------------------+--------------------------------+
  1. 空文字列の処理
SELECT SPLIT_BY_REGEXP('', ','), SPLIT_BY_REGEXP('hello', 'xyz');
+---------------------------+-------------------------------+
| SPLIT_BY_REGEXP('', ',') | SPLIT_BY_REGEXP('hello', 'xyz') |
+---------------------------+-------------------------------+
| [""] | ["hello"] |
+---------------------------+-------------------------------+
  1. 最大要素数パラメータの使用
SELECT SPLIT_BY_REGEXP('a,b,c,d,e', ',', 3), SPLIT_BY_REGEXP('1-2-3-4-5', '-', 2);
+--------------------------------------+--------------------------------------+
| SPLIT_BY_REGEXP('a,b,c,d,e', ',', 3) | SPLIT_BY_REGEXP('1-2-3-4-5', '-', 2) |
+--------------------------------------+--------------------------------------+
| ["a", "b", "c,d,e"] | ["1", "2-3-4-5"] |
+--------------------------------------+--------------------------------------+
  1. 空白文字のパターン
SELECT SPLIT_BY_REGEXP('hello world  test', '\\s+'), SPLIT_BY_REGEXP('a\tb\nc\rd', '\\s');
+------------------------------------------+------------------------------------+
| SPLIT_BY_REGEXP('hello world test', '\s+') | SPLIT_BY_REGEXP('a\tb\nc\rd', '\s') |
+------------------------------------------+------------------------------------+
| ["hello", "world", "test"] | ["a", "b", "c", "d"] |
+------------------------------------------+------------------------------------+
  1. 特殊文字とエスケープ
SELECT SPLIT_BY_REGEXP('a.b.c.d', '\\.'), SPLIT_BY_REGEXP('x(y)z[w]', '[\\(\\)\\[\\]]');
+----------------------------------+--------------------------------------------+
| SPLIT_BY_REGEXP('a.b.c.d', '\.') | SPLIT_BY_REGEXP('x(y)z[w]', '[\(\)\[\]]') |
+----------------------------------+--------------------------------------------+
| ["a", "b", "c", "d"] | ["x", "y", "z", "w"] |
+----------------------------------+--------------------------------------------+
  1. 単語境界と複雑なパターン
SELECT SPLIT_BY_REGEXP('TheQuickBrownFox', '[A-Z]'), SPLIT_BY_REGEXP('user@example.com', '@|\\.');
+------------------------------------------+-------------------------------------------+
| SPLIT_BY_REGEXP('TheQuickBrownFox', '[A-Z]') | SPLIT_BY_REGEXP('user@example.com', '@|\.') |
+------------------------------------------+-------------------------------------------+
| ["", "he", "uick", "rown", "ox"] | ["user", "example", "com"] |
+------------------------------------------+-------------------------------------------+
  1. UTF-8 のマルチバイト文字
SELECT SPLIT_BY_REGEXP('ṭṛì→ḍḍumai→hello', '→'), SPLIT_BY_REGEXP('αβγδε', '[βδ]');
+------------------------------------------+----------------------------------+
| SPLIT_BY_REGEXP('ṭṛì→ḍḍumai→hello', '→') | SPLIT_BY_REGEXP('αβγδε', '[βδ]') |
+------------------------------------------+----------------------------------+
| ["ṭṛì", "ḍḍumai", "hello"] | ["α", "γ", "ε"] |
+------------------------------------------+----------------------------------+
  1. 連続する一致と空の要素
SELECT SPLIT_BY_REGEXP('a,,b,c', ','), SPLIT_BY_REGEXP('123abc456def', '[a-z]+');
+-------------------------------+---------------------------------------+
| SPLIT_BY_REGEXP('a,,b,c', ',') | SPLIT_BY_REGEXP('123abc456def', '[a-z]+') |
+-------------------------------+---------------------------------------+
| ["a", "", "b", "c"] | ["123", "456", ""] |
+-------------------------------+---------------------------------------+

キーワード​

SPLIT_BY_REGEXP, SPLIT, REGEXP, REGEXP_SPLIT_TO_ARRAY