- 카테고리:
문자열 및 이진 함수 (일반)
STRTOK¶
주어진 문자열을 토큰화하고, 요청된 부분을 반환합니다.
- 참고 항목:
구문¶
STRTOK(<string> [,<delimiter>] [,<partNumber>])
인자¶
필수:
string토큰화할 텍스트입니다.
선택 사항:
delimiter토큰화할 구분 기호 세트를 나타내는 텍스트입니다. 구분 기호 문자열의 각 문자는 별도의 구분 기호입니다. 예를 들어 구분 기호가
'@.'`인 경우, :code:’@’` 및'.'모두 구분 기호로 처리됩니다. 이 동작은 전체 구분 기호를 단일 구분 기호 문자열로 처리하는 :doc:`split_part`와 다릅니다.구분 기호가 비어 있고 :samp:`{string}`이 비어 있으면 함수는 NULL을 반환합니다. 구분 기호가 비어 있고 :samp:`{string}`이 비어 있지 않으면 전체 문자열이 하나의 토큰으로 처리됩니다.
기본값: 단일 공백 문자
partNumber첫 번째 토큰이 토큰 번호 0이 아닌 토큰 번호 1이 되도록 1부터 시작하는 토큰을 요청했습니다. 토큰 번호가 범위를 벗어나면 NULL이 반환됩니다.
기본값: 1
반환¶
반환된 값의 데이터 타입은 VARCHAR 입니다.
요청된 부분이 존재하지 않거나 인자가 NULL인 경우 NULL이 반환됩니다.
사용법 노트¶
Linux strtok()과 유사하게, STRTOK는 빈 문자열을 토큰으로 반환하지 않습니다. 이 동작은 입력 문자열이 구분 기호로 시작하거나 끝날 때 또는 연속적인 구분 기호가 있는 경우 빈 문자열을 부분으로 반환할 수 :doc:`split_part`와 다릅니다.
예¶
다음 예제에서는 STRTOK 함수를 호출합니다.
문자열의 첫 번째 토큰 반환¶
다음의 간단한 예제에서는 STRTOK를 호출하여 문자열의 첫 번째 토큰을 반환합니다.
SELECT STRTOK('a.b.c', '.', 1);
+-------------------------+
| STRTOK('A.B.C', '.', 1) |
|-------------------------|
| a |
+-------------------------+
여러 구분 기호를 사용하여 다른 토큰 반환¶
이 예제에서는 구분 기호가 @ 및 ``.``일 때 여러 구분 기호를 사용하여 첫 번째, 두 번째, 세 번째 토큰을 반환하는 방법을 보여줍니다.
SELECT STRTOK('user@snowflake.com', '@.', 1);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 1) |
|---------------------------------------|
| user |
+---------------------------------------+
SELECT STRTOK('user@snowflake.com', '@.', 2);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 2) |
|---------------------------------------|
| snowflake |
+---------------------------------------+
SELECT STRTOK('user@snowflake.com', '@.', 3);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 3) |
|---------------------------------------|
| com |
+---------------------------------------+
문자열에서 가능한 마지막 토큰을 지나 인덱싱하는 방법 표시¶
다음 예제에서는 문자열에서 가능한 마지막 토큰을 지나 인덱싱할 때 발행하는 상황을 보여줍니다.
SELECT STRTOK('user@snowflake.com.', '@.', 4);
+----------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM.', '@.', 4) |
|----------------------------------------|
| NULL |
+----------------------------------------+
첫 번째 요소가 문자열의 끝을 지나칠 수 있는 방법 표시¶
이 예제에서 입력 문자열은 비어 있으며 요소가 없습니다. 따라서 첫 번째 요소는 문자열의 끝을 지나고 함수는 빈 문자열 대신 NULL을 반환합니다.
SELECT STRTOK('', '', 1);
+-------------------+
| STRTOK('', '', 1) |
|-------------------|
| NULL |
+-------------------+
빈 구분 기호로 STRTOK 호출¶
다음은 빈 구분 기호 문자열의 예입니다.
SELECT STRTOK('a.b', '', 1);
+----------------------+
| STRTOK('A.B', '', 1) |
|----------------------|
| a.b |
+----------------------+
인자의 NULL 값 표시¶
다음 예제에서는 각 인자에 대해 NULL 값을 지정합니다.
SELECT STRTOK(NULL, '.', 1);
+----------------------+
| STRTOK(NULL, '.', 1) |
|----------------------|
| NULL |
+----------------------+
SELECT STRTOK('a.b', NULL, 1);
+------------------------+
| STRTOK('A.B', NULL, 1) |
|------------------------|
| NULL |
+------------------------+
SELECT STRTOK('a.b', '.', NULL);
+--------------------------+
| STRTOK('A.B', '.', NULL) |
|--------------------------|
| NULL |
+--------------------------+
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| |
+----------+----------+----------+----------+-----------------+--------------+--------------+