カテゴリ:

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

STRTOK

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

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

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

SPLIT_PART

構文

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

引数

必須:

string

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

オプション:

delimiter

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

partNr

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

戻り値

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

使用上の注意

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

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

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

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

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

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

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

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

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

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

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

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

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

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