- カテゴリ:
文字列とバイナリ関数 (一般)
SPLIT¶
特定の区切り文字で特定の文字列を分割し、結果を文字列の配列で返します。
ソース文字列内の連続する分割文字列、またはソース文字列の先頭または末尾に分割文字列が存在すると、出力に空の文字列が生じます。空の区切り文字列は、ソース文字列のみを含む配列になります。いずれかのパラメーターが NULLの場合、 NULL が返されます。
FLATTEN、ARRAY_SIZE、インデックス位置によるアクセス など、結果の 配列 で動作する関数および構造を使用できます。
- こちらもご参照ください:
構文¶
SPLIT(<string>, <separator>)
引数¶
string部分に分割されるテキストです。
separator文字列を分割するテキストです。
戻り値¶
戻り値のデータ型は ARRAY です。
照合順序の詳細¶
この関数は、次の照合仕様をサポートしません。
pi(句読点は区別しない)。cs-ai(大文字と小文字は区別、アクセント記号は区別しない)。
出力配列の値には照合仕様が含まれていないため、後続の照合操作はサポートされません。
例¶
localhost IP アドレ ス 127.0.0.1 を4つの部分のそれぞれで構成される配列に分割します。
SELECT SPLIT('127.0.0.1', '.');
+-------------------------+
| SPLIT('127.0.0.1', '.') |
|-------------------------|
| [ |
| "127", |
| "0", |
| "0", |
| "1" |
| ] |
+-------------------------+
インデックス位置で返された配列の最初の要素にアクセスします。
SELECT SPLIT('127.0.0.1', '.')[0];
+----------------------------+
| SPLIT('127.0.0.1', '.')[0] |
|----------------------------|
| "127" |
+----------------------------+
セパレーターとして垂直線を含む文字列を分割し、空の文字列を含む出力が返されるようにします。
SELECT SPLIT('|a||', '|');
+--------------------+
| 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;
+------------+------------------+
| 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;
+------------+-----------+
| FIRST_NAME | CHILDNAME |
|------------+-----------|
| Mark | Marky |
| Mark | Mike |
| Mark | Maria |
| John | Johnny |
| John | Jane |
+------------+-----------+