カテゴリ:

文字列とバイナリ関数 (一般)、 テーブル関数

STRTOK_SPLIT_TO_TABLE

指定された区切り文字のセットで文字列をトークン化し、結果を行にフラット化します。

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

STRTOKSTRTOK_TO_ARRAY

構文

STRTOK_SPLIT_TO_TABLE(<string> [,<delimiter_list>])

引数

必須:

文字列

トークン化されるテキストです。

オプション:

区切り文字リスト

区切り文字のセットです。オプション。デフォルト値は単一のスペース文字です。

戻り値

これはテーブルを返します。

返される行は、固定された列のセットで構成されます。

+-----+-------+------ +
| SEQ | INDEX | VALUE |
|-----+------+--------|
SEQ

入力レコードに関連付けられた一意のシーケンス番号です。シーケンスにギャップがないことや、特定の方法で順序付けられていることは保証されません。

INDEX

要素のインデックスです。1つのベースです。

VALUE

フラット化された配列の要素の値です。

注釈

この関数のデータソースとして使用された元の(相関した)テーブルの列にもアクセスできます。元のテーブルの単一の行がフラット化されたビューで複数の行になった場合、この入力行の値は STRTOK_SPLIT_TO_TABLEによって生成された行の数と一致するように複製されます。

定数入力の簡単な例を次に示します。

SELECT table1.value 
    FROM table(strtok_split_to_table('a.b', '.')) AS table1
    ORDER BY table1.value;
+-------+
| VALUE |
|-------|
| a     |
| b     |
+-------+

次の2つの例では、以下で作成したテーブルとデータを使用しています。

CREATE OR REPLACE TABLE splittable (v VARCHAR);
INSERT INTO splittable (v) VALUES ('a b'), ('cde'), ('f|g'), ('');

この例は、相関テーブルとしての関数の使用法を示しています。

SELECT * 
    FROM splittable, LATERAL STRTOK_SPLIT_TO_TABLE(splittable.v, ' ')
    ORDER BY SEQ, INDEX;
+-----+-----+-------+-------+
| V   | SEQ | INDEX | VALUE |
|-----+-----+-------+-------|
| a b |   1 |     1 | a     |
| a b |   1 |     2 | b     |
| cde |   2 |     1 | cde   |
| f|g |   3 |     1 | f|g   |
+-----+-----+-------+-------+

この例は、複数の区切り文字を指定することを除いて、前述と同じです。

SELECT * 
    FROM splittable, LATERAL STRTOK_SPLIT_TO_TABLE(splittable.v, ' |')
    ORDER BY SEQ, INDEX;
+-----+-----+-------+-------+
| V   | SEQ | INDEX | VALUE |
|-----+-----+-------+-------|
| a b |   1 |     1 | a     |
| a b |   1 |     2 | b     |
| cde |   2 |     1 | cde   |
| f|g |   3 |     1 | f     |
| f|g |   3 |     2 | g     |
+-----+-----+-------+-------+