カテゴリ:

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

SPLIT_PART

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

指定した文字以降のすべての文字を返すには、 POSITIONSUBSTR 関数を使用できます。例については、 メール、電話、日付文字列の部分文字列を返す をご参照ください。

Tip

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

こちらもご覧ください:

SPLIT

構文

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

引数

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));
Copy
+-------------------+---------+
| 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;
Copy
+------------+-----------+
| 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;
Copy
+------------+-----------+
| FIRST_PART | LAST_PART |
|------------+-----------|
|            | a         |
+------------+-----------+

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

SELECT SPLIT_PART('aaa--bbb-BBB--ccc', '--', 2) AS multi_character_separator;
Copy
+---------------------------+
| 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));
Copy
+-------------------+--------------------+
| PART_NUMBER_VALUE | PORTION            |
|-------------------+--------------------|
|                 1 | user@snowflake.com |
|                -1 | user@snowflake.com |
|                 2 |                    |
|                -2 |                    |
+-------------------+--------------------+