カテゴリ:

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

STRTOK

指定された文字列をトークン化し、要求された部分を返します。

要求された部分が存在しない場合、 NULL が返されます。パラメーターが NULLの場合、 NULLが返されます。

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

SPLIT_PART

構文

STRTOK(<string> [,<delimiter>] [,<partNr>])

引数

必須:

文字列

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

オプション:

区切り文字

トークン化する区切り文字のセットを表すテキストです。区切り文字列の各文字は区切り文字です。区切り文字が空で、 文字列 が空の場合、関数は NULLを返します。区切り文字が空で、 文字列 が空でない場合、文字列全体が1つのトークンとして扱われます。区切り文字のデフォルト値は単一のスペース文字です。

部分Nr

要求されたトークンです(1ベース。最初のトークンはトークン番号0ではなくトークン番号1)。トークン番号が範囲外の場合、 NULLが返されます。デフォルト値は1です。

戻り値

返される値のデータ型は VARCHARです。

使用上の注意

文字列が区切り文字で始まるか、区切り文字で終了する場合、システムは区切り文字の前または後の空きスペースを、それぞれ有効なトークンと見なします。

Linux strtok()と同様に、 STRTOK がトークンとして空の文字列を返すことはありません。

STRTOK の簡単な使用例を次に示します。

SELECT STRTOK('a.b.c', '.', 1);
+-------------------------+
| STRTOK('A.B.C', '.', 1) |
|-------------------------|
| a                       |
+-------------------------+

この例は、区切り文字が「@」および「。」の場合、複数の区切り文字を使用して、1番目、2番目、3番目のトークンを返す方法を示しています。

SELECT STRTOK('user@snowflake.com', '@.', 1);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 1) |
|---------------------------------------|
| user                                  |
+---------------------------------------+
SELECT STRTOK('user@snowflake.com', '@.', 2);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 2) |
|---------------------------------------|
| snowflake                             |
+---------------------------------------+
SELECT STRTOK('user@snowflake.com', '@.', 3);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 3) |
|---------------------------------------|
| com                                   |
+---------------------------------------+

これは、文字列内の最後の可能なトークンを超えてインデックスを作成しようとするとどうなるかを示しています。

select strtok('user@snowflake.com.', '@.', 4);
+----------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM.', '@.', 4) |
|----------------------------------------|
| NULL                                   |
+----------------------------------------+

この例では、入力文字列が空であるため、0要素があり、要素#1は文字列の終わりを過ぎているため、関数は空の文字列ではなく NULL を返します。

select strtok('', '', 1);
+-------------------+
| STRTOK('', '', 1) |
|-------------------|
| NULL              |
+-------------------+

空の区切り文字列を使用した例を次に示します。

select strtok('a.b', '', 1);
+----------------------+
| STRTOK('A.B', '', 1) |
|----------------------|
| a.b                  |
+----------------------+

以下に、各パラメーターの NULL 値の例を示します。

select strtok(NULL, '.', 1);
+----------------------+
| STRTOK(NULL, '.', 1) |
|----------------------|
| NULL                 |
+----------------------+
select strtok('a.b', NULL, 1);
+------------------------+
| STRTOK('A.B', NULL, 1) |
|------------------------|
| NULL                   |
+------------------------+
select strtok('a.b', '.', NULL);
+--------------------------+
| STRTOK('A.B', '.', NULL) |
|--------------------------|
| NULL                     |
+--------------------------+