카테고리:

문자열 및 이진 함수 (일반)

SPLIT_PART

지정된 문자에서 주어진 문자열을 분할하고, 요청된 부분을 반환합니다.

지정된 문자 뒤의 모든 문자를 반환하려면 POSITIONSUBSTR 함수를 사용하면 됩니다. 예를 보려면 이메일, 전화번호 및 날짜 문자열의 하위 문자열 반환하기 를 참조하십시오.

검색 최적화 서비스를 사용하여 이 함수를 호출하는 쿼리의 성능을 향상할 수 있습니다. 자세한 내용은 검색 최적화 서비스 섹션을 참조하십시오.

참고 항목:

SPLIT

구문

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

인자

string

부분으로 분할할 텍스트입니다.

delimiter

분할 기준인 구분 기호를 나타내는 텍스트입니다.

partNumber

분할의 요청된 부분입니다(1부터 시작).

값이 음수이면 부분은 문자열 끝에서 거꾸로 계산됩니다.

반환

이 함수는 VARCHAR 형식의 값을 반환합니다.

인자가 NULL인 경우 NULL이 반환됩니다.

사용법 노트

  • partNumber 가 범위를 벗어나는 경우, 반환된 값은 빈 문자열입니다.

  • 문자열이 구분 기호로 시작하거나 끝나는 경우, 시스템은 구분 기호 앞이나 뒤에 있는 빈 공간을 분할 결과의 유효한 부분으로 각각 간주합니다. 예를 보려면 아래의 섹션을 참조하십시오.

  • partNumber 가 0인 경우, 1로 처리됩니다. 즉, 분할의 첫 번째 요소를 가져옵니다. 인덱스가 1부터 시작하는지 0부터 시작하는지에 대한 혼동을 피하기 위해 Snowflake는 0을 1의 동의어로 사용하지 않을 것을 권장합니다.

  • 구분 기호가 빈 문자열인 경우, 분할 후 반환된 값은 입력 문자열입니다(문자열은 분할되지 않음).

데이터 정렬 세부 정보

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         |
+------------+-----------+

다음 예에서는 세로 막대로 구분된 문자열의 첫 번째 및 두 번째 부분을 반환합니다. 구분 기호는 입력 문자열의 첫 번째 부분이므로 분할 후 첫 번째 요소는 빈 문자열입니다.

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                   |
+---------------------------+

다음 예는 구분 기호가 빈 문자열인 경우, 분할 후에도 여전히 하나의 문자열만 있음을 보여줍니다.

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 |                    |
+-------------------+--------------------+