카테고리:

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

SPLIT_PART

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

어떤 매개 변수가 NULL인 경우, NULL이 반환됩니다.

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

참고 항목:

SPLIT

구문

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

인자

string

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

delimiter

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

partNumber

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

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

사용법 노트

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

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

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

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

데이터 정렬 세부 정보

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

localhost 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

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

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

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

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