- カテゴリ:
文字列とバイナリ関数 (一般)
SPLIT_PART¶
指定された文字列を分割し、リクエストされた部分を返します。
パラメーターが NULL の場合、 NULL が返されます。
Tip
検索最適化サービスを使用すると、この関数を呼び出すクエリのパフォーマンスを向上させることができます。詳細については、 検索最適化サービス をご参照ください。
- こちらもご覧ください:
構文¶
SPLIT_PART(<string>, <delimiter>, <partNumber>)
引数¶
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');
例¶
異なる 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 | | +----+---------------------------------+
ローカルホスト 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 | +---------------------------------+----------------------------------+
垂直バーで区切られた文字列の最初と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 | +-------------------------------+-------------------------------+
次の例は、複数文字の区切り記号を示しています。
SELECT SPLIT_PART('aaa--bbb-BBB--ccc', '--', 2); +------------------------------------------+ | SPLIT_PART('AAA--BBB-BBB--CCC', '--', 2) | |------------------------------------------| | bbb-BBB | +------------------------------------------+
次の例は、区切り文字が空の文字列の場合、分割後も文字列が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 | | +----+------------------------------------------+