カテゴリ:

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

SPLIT_PART

指定された文字列を分割し、リクエストされた部分を返します。

パラメーターが NULL の場合、 NULL が返されます。

Tip

検索最適化サービスを使用すると、この関数を呼び出すクエリのパフォーマンスを向上させることができます。詳細については、 検索最適化サービス をご参照ください。

こちらもご覧ください:

SPLIT

構文

SPLIT_PART(<string>, <delimiter>, <partNumber>)
Copy

引数

string

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

delimiter

分割する区切り文字を表すテキストです。

partNumber

分割のリクエストされた部分(1ベース)です。

値が負の場合、部分は文字列の終わりから逆方向にカウントされます。

使用上の注意

  • partNumber が範囲外の場合、戻り値は空の文字列です。

  • 文字列が区切り文字で始まるか、区切り文字で終了する場合、システムは区切り文字の前または後の空きスペースを、それぞれ分割結果の有効な部分と見なします。例については、以下の セクションをご参照ください。

  • partNumber が0の場合は、1として扱われます。つまり、分割の最初の要素を取得します。インデックスが1ベースであるか0ベースであるかに関する混乱を避けるために、Snowflakeは1の同義語として0を使用することを避けるようにお勧めします。

  • 区切り文字が空の文字列の場合、分割後の戻り値は入力文字列になります(文字列は分割されません)。

照合の詳細

The collation specifications of all input arguments must be compatible.

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

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

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

注釈

upper または lower 照合順序指定子を持つ列でこの関数を使用するには、 アカウントで2024_02動作変更バンドルを有効にする 必要があります。

アカウントでこのバンドルを有効にするには、以下のステートメントを実行します。

SELECT SYSTEM$ENABLE_BEHAVIOR_CHANGE_BUNDLE('2024_02');
Copy

異なる partNumber 値によって返される部分を示します。

select  0, split_part('11.22.33', '.',  0) UNION
select  1, split_part('11.22.33', '.',  1) UNION
select  2, split_part('11.22.33', '.',  2) UNION
select  3, split_part('11.22.33', '.',  3) UNION
select  4, split_part('11.22.33', '.',  4) UNION
select -1, split_part('11.22.33', '.', -1) UNION
select -2, split_part('11.22.33', '.', -2) UNION
select -3, split_part('11.22.33', '.', -3) UNION
select -4, split_part('11.22.33', '.', -4)
;
+----+---------------------------------+
|  0 | SPLIT_PART('11.22.33', '.',  0) |
|----+---------------------------------|
|  0 | 11                              |
|  1 | 11                              |
|  2 | 22                              |
|  3 | 33                              |
|  4 |                                 |
| -1 | 33                              |
| -2 | 22                              |
| -3 | 11                              |
| -4 |                                 |
+----+---------------------------------+
Copy

ローカルホスト IP アドレス 127.0.0.1 の最初と最後の部分を返します。

SELECT SPLIT_PART('127.0.0.1', '.', 1), SPLIT_PART('127.0.0.1', '.', -1);
+---------------------------------+----------------------------------+
| SPLIT_PART('127.0.0.1', '.', 1) | SPLIT_PART('127.0.0.1', '.', -1) |
|---------------------------------+----------------------------------|
| 127                             | 1                                |
+---------------------------------+----------------------------------+
Copy

垂直バーで区切られた文字列の最初と2番目の部分を返します。区切り文字は入力文字列の最初の部分であるため、分割後の最初の要素は空の文字列であることに注意してください。

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

次の例は、複数文字の区切り記号を示しています。

SELECT SPLIT_PART('aaa--bbb-BBB--ccc', '--', 2);
+------------------------------------------+
| SPLIT_PART('AAA--BBB-BBB--CCC', '--', 2) |
|------------------------------------------|
| bbb-BBB                                  |
+------------------------------------------+
Copy

次の例は、区切り文字が空の文字列の場合、分割後も文字列が1つだけであることを示しています。

select  1, split_part('user@snowflake.com', '',  1) UNION
select -1, split_part('user@snowflake.com', '', -1) UNION
select  2, split_part('user@snowflake.com', '',  2) UNION
select -2, split_part('user@snowflake.com', '', -2);
+----+------------------------------------------+
|  1 | SPLIT_PART('USER@SNOWFLAKE.COM', '',  1) |
|----+------------------------------------------|
|  1 | user@snowflake.com                       |
| -1 | user@snowflake.com                       |
|  2 |                                          |
| -2 |                                          |
+----+------------------------------------------+
Copy