カテゴリ:

文字列とバイナリ関数 (一般)

SPLIT

特定の区切り文字で特定の文字列を分割し、結果を文字列の配列で返します。

ソース文字列内の連続する分割文字列、またはソース文字列の先頭または末尾に分割文字列が存在すると、出力に空の文字列が生じます。空の区切り文字列は、ソース文字列のみを含む配列になります。いずれかのパラメーターが NULLの場合、 NULL が返されます。

FLATTENARRAY_SIZEインデックス位置によるアクセス など、結果の 配列 で動作する関数および構造を使用できます。

こちらもご参照ください:

SPLIT_PART

構文

SPLIT(<string>, <separator>)
Copy

引数

string

部分に分割されるテキストです。

separator

文字列を分割するテキストです。

戻り値

戻り値のデータ型は ARRAY です。

照合順序の詳細

この関数は、次の照合仕様をサポートしません。

  • pi (句読点は区別しない)。

  • cs-ai (大文字と小文字は区別、アクセント記号は区別しない)。

出力配列の値には照合仕様が含まれていないため、後続の照合操作はサポートされません。

localhost IP アドレ ス 127.0.0.1 を4つの部分のそれぞれで構成される配列に分割します。

SELECT SPLIT('127.0.0.1', '.');
Copy
+-------------------------+
| SPLIT('127.0.0.1', '.') |
|-------------------------|
| [                       |
|   "127",                |
|   "0",                  |
|   "0",                  |
|   "1"                   |
| ]                       |
+-------------------------+

インデックス位置で返された配列の最初の要素にアクセスします。

SELECT SPLIT('127.0.0.1', '.')[0];
Copy
+----------------------------+
| SPLIT('127.0.0.1', '.')[0] |
|----------------------------|
| "127"                      |
+----------------------------+

セパレーターとして垂直線を含む文字列を分割し、空の文字列を含む出力が返されるようにします。

SELECT SPLIT('|a||', '|');
Copy
+--------------------+
| SPLIT('|A||', '|') |
|--------------------|
| [                  |
|   "",              |
|   "a",             |
|   "",              |
|   ""               |
| ]                  |
+--------------------+

LATERAL FLATTEN 構造を使用して、単一の文字列から複数の記録を生成するには、SPLIT の結果を使用します。FLATTEN は、VARIANT、OBJECT、または ARRAY 列を取り、側面ビュー(つまり FROM 句でその前にある他のテーブルを参照する相関を含むインラインビュー)を生成するテーブル関数です。

CREATE TABLE split_test_names(first_name VARCHAR, children VARCHAR);

INSERT INTO split_test_names values
  ('Mark', 'Marky,Mike,Maria'),
  ('John', 'Johnny,Jane');

SELECT * FROM split_test_names;
Copy
+------------+------------------+
| FIRST_NAME | CHILDREN         |
|------------+------------------|
| Mark       | Marky,Mike,Maria |
| John       | Johnny,Jane      |
+------------+------------------+
SELECT first_name, C.value::STRING AS childname
  FROM split_test_names,
    LATERAL FLATTEN(INPUT=>SPLIT(children, ',')) C;
Copy
+------------+-----------+
| FIRST_NAME | CHILDNAME |
|------------+-----------|
| Mark       | Marky     |
| Mark       | Mike      |
| Mark       | Maria     |
| John       | Johnny    |
| John       | Jane      |
+------------+-----------+