- 카테고리:
문자열 및 이진 함수 (일반)
SPLIT_PART¶
지정된 문자에서 주어진 문자열을 분할하고, 요청된 부분을 반환합니다.
지정된 문자 뒤의 모든 문자를 반환하려면 POSITION 및 SUBSTR 함수를 사용하면 됩니다. 예를 보려면 이메일, 전화번호 및 날짜 문자열의 하위 문자열 반환하기 를 참조하십시오.
팁
검색 최적화 서비스를 사용하여 이 함수를 호출하는 쿼리의 성능을 향상할 수 있습니다. 자세한 내용은 검색 최적화 서비스 섹션을 참조하십시오.
구문¶
SPLIT_PART(<string>, <delimiter>, <partNumber>)
인자¶
string부분으로 분할할 텍스트입니다.
delimiter분할 기준인 구분 기호를 나타내는 텍스트입니다. 전체 구분 기호 문자열은 여러 문자가 포함된 경우에도 단일 구분 기호로 처리됩니다. 이 동작은 구분 기호의 각 문자를 별도의 구분 기호로 처리하는 :doc:`strtok`와 다릅니다.
partNumber1부터 시작하는 요청된 분할 부분입니다(첫 번째 토큰은 토큰 번호 0이 아니라 토큰 번호 1임).
값이 음수이면 부분은 문자열 끝에서 거꾸로 계산됩니다.
반환¶
이 함수는 VARCHAR 형식의 값을 반환합니다.
인자 중 하나라도 NULL이면 이 함수는 NULL을 반환합니다.
사용법 노트¶
partNumber가 범위를 벗어나는 경우, 반환된 값은 빈 문자열입니다.문자열이 구분 기호로 시작하거나 끝나는 경우 시스템은 각각 구분 기호 앞이나 뒤에 있는 빈 공간을 분할 결과의 유효한 부분으로 간주합니다. 예제는 아래의 예제 섹션을 참조하세요. 즉, SPLIT_PART는 빈 문자열을 반환하지 않는 :doc:`strtok`와 달리 빈 문자열을 부분으로 반환할 수 있습니다.
partNumber가 0인 경우, 1로 처리됩니다. 즉, 분할의 첫 번째 요소를 가져옵니다. 인덱스가 1부터 시작하는지 0부터 시작하는지에 대한 혼동을 피하기 위해 Snowflake는 0을 1의 동의어로 사용하지 않을 것을 권장합니다.구분 기호가 빈 문자열인 경우, 분할 후 반환된 값은 입력 문자열입니다(문자열은 분할되지 않음).
데이터 정렬 세부 정보¶
The collation specifications of all input arguments must be compatible.
이 함수는 다음 데이터 정렬 사양을 지원하지 않습니다.
pi(구두점 구분 안 함).cs-ai(대/소문자 구분, 악센트 구분 안 함).
예¶
다음 예제에서는 SPLIT_PART 함수를 호출합니다.
다양한 부분 번호 값에 대해 반환된 부분 시연¶
다음 예제에서는 다양한 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 | |
+-------------------+---------+
IP 주소의 첫 번째 부분과 마지막 부분을 반환합니다.¶
다음 예제에서는 localhost IP 주소 :code:`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 |
+------------+-----------+
구분 기호를 첫 번째 문자로 표시¶
다음 예제에서는 세로 막대로 구분된 문자열의 첫 번째 부분과 두 번째 부분을 반환합니다. 구분 기호는 입력 문자열의 첫 번째 부분이므로 분할 후 첫 번째 요소는 빈 문자열입니다.
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_delimiter;
+---------------------------+
| MULTI_CHARACTER_DELIMITER |
|---------------------------|
| 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));
+-------------------+--------------------+
| PART_NUMBER_VALUE | PORTION |
|-------------------+--------------------|
| 1 | user@snowflake.com |
| -1 | user@snowflake.com |
| 2 | |
| -2 | |
+-------------------+--------------------+
STRTOK와 SPLIT_PART 간의 차이점 표시¶
이 예제에서는 반복되는 구분 기호를 사용할 때 STRTOK와 SPLIT_PART 간의 차이점을 보여줍니다. STRTOK는 구분 기호 문자열 '|-'`의 각 문자를 별도의 구분 기호로 처리하여 :code:’|’` 및 '-' 문자마다 분할합니다. 대조적으로, SPLIT_PART는 전체 구분 기호 문자열 :code:`’|-’`를 단일 구분 기호로 처리하므로 정확한 시퀀스가 나타나는 곳에서만 분할됩니다.
SELECT STRTOK('data1||data2|-data3---data4', '|-', 1) AS strtok_1,
STRTOK('data1||data2|-data3---data4', '|-', 2) AS strtok_2,
STRTOK('data1||data2|-data3---data4', '|-', 3) AS strtok_3,
STRTOK('data1||data2|-data3---data4', '|-', 4) AS strtok_4,
SPLIT_PART('data1||data2|-data3---data4', '|-', 1) AS split_part_1,
SPLIT_PART('data1||data2|-data3---data4', '|-', 2) AS split_part_2,
SPLIT_PART('data1||data2|-data3---data4', '|-', 3) AS split_part_3;
+----------+----------+----------+----------+-----------------+--------------+--------------+
| STRTOK_1 | STRTOK_2 | STRTOK_3 | STRTOK_4 | SPLIT_PART_1 | SPLIT_PART_2 | SPLIT_PART_3 |
|----------+----------+----------+----------+-----------------+--------------+--------------|
| data1 | data2 | data3 | data4 | data1||data2 | data3---data4| |
+----------+----------+----------+----------+-----------------+--------------+--------------+