- カテゴリ:
文字列とバイナリ関数 (一般)
SPLIT_PART¶
指定された文字列を分割し、リクエストされた部分を返します。
指定した文字以降のすべての文字を返すには、 POSITION と SUBSTR 関数を使用できます。例については、 メール、電話、日付文字列の部分文字列を返す をご参照ください。
Tip
検索最適化サービスを使用すると、この関数を呼び出すクエリのパフォーマンスを向上させることができます。詳細については、 検索最適化サービス をご参照ください。
- こちらもご覧ください:
構文¶
SPLIT_PART(<string>, <delimiter>, <partNumber>)
引数¶
string
部分に分割されるテキストです。
delimiter
分割する区切り文字を表すテキストです。
partNumber
分割のリクエストされた部分(1ベース)です。
値が負の場合、部分は文字列の終わりから逆方向にカウントされます。
戻り値¶
この関数は VARCHAR型の値を返します。
引数のいずれかが NULL の場合、 NULL が返されます。
使用上の注意¶
partNumber
が範囲外の場合、戻り値は空の文字列です。文字列が区切り文字で始まるか、区切り文字で終了する場合、システムは区切り文字の前または後の空きスペースを、それぞれ分割結果の有効な部分と見なします。例については、以下の 例 セクションをご参照ください。
partNumber
が0の場合は、1として扱われます。つまり、分割の最初の要素を取得します。インデックスが1ベースであるか0ベースであるかに関する混乱を避けるために、Snowflakeは1の同義語として0を使用することを避けるようにお勧めします。区切り文字が空の文字列の場合、分割後の戻り値は入力文字列になります(文字列は分割されません)。
照合順序の詳細¶
The collation specifications of all input arguments must be compatible.
この関数は、次の照合仕様をサポートしません。
pi
(句読点は区別しない)。cs-ai
(大文字と小文字は区別、アクセント記号は区別しない)。
例¶
この例では、異なる partNumber
の値によって返される部分を示しています。
SELECT column1 part_number_value, column2 portion
FROM VALUES
(0, SPLIT_PART('11.22.33', '.', 0)),
(1, SPLIT_PART('11.22.33', '.', 1)),
(2, SPLIT_PART('11.22.33', '.', 2)),
(3, SPLIT_PART('11.22.33', '.', 3)),
(4, SPLIT_PART('11.22.33', '.', 4)),
(-1, SPLIT_PART('11.22.33', '.', -1)),
(-2, SPLIT_PART('11.22.33', '.', -2)),
(-3, SPLIT_PART('11.22.33', '.', -3)),
(-4, SPLIT_PART('11.22.33', '.', -4));
+-------------------+---------+
| PART_NUMBER_VALUE | PORTION |
|-------------------+---------|
| 0 | 11 |
| 1 | 11 |
| 2 | 22 |
| 3 | 33 |
| 4 | |
| -1 | 33 |
| -2 | 22 |
| -3 | 11 |
| -4 | |
+-------------------+---------+
この例は、localhost IP アドレス 127.0.0.1
の最初と最後の部分を返します。
SELECT SPLIT_PART('127.0.0.1', '.', 1) AS first_part,
SPLIT_PART('127.0.0.1', '.', -1) AS last_part;
+------------+-----------+
| FIRST_PART | LAST_PART |
|------------+-----------|
| 127 | 1 |
+------------+-----------+
この例は、垂直バーで区切られた文字列の最初と2番目の部分を返します。区切り文字は入力文字列の最初の部分であるため、分割後の最初の要素は空の文字列であることに注意してください。
SELECT SPLIT_PART('|a|b|c|', '|', 1) AS first_part,
SPLIT_PART('|a|b|c|', '|', 2) AS last_part;
+------------+-----------+
| FIRST_PART | LAST_PART |
|------------+-----------|
| | a |
+------------+-----------+
この例は、複数文字の区切り記号を示しています。
SELECT SPLIT_PART('aaa--bbb-BBB--ccc', '--', 2) AS multi_character_separator;
+---------------------------+
| MULTI_CHARACTER_SEPARATOR |
|---------------------------|
| bbb-BBB |
+---------------------------+
次の例は、区切り文字が空の文字列の場合、分割後も文字列が1つだけであることを示しています。
SELECT column1 part_number_value, column2 portion
FROM VALUES
(1, split_part('user@snowflake.com', '', 1)),
(-1, split_part('user@snowflake.com', '', -1)),
(2, split_part('user@snowflake.com', '', 2)),
(-2, split_part('user@snowflake.com', '', -2));
+-------------------+--------------------+
| PART_NUMBER_VALUE | PORTION |
|-------------------+--------------------|
| 1 | user@snowflake.com |
| -1 | user@snowflake.com |
| 2 | |
| -2 | |
+-------------------+--------------------+