카테고리:

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

STRTOK

주어진 문자열을 토큰화하고, 요청된 부분을 반환합니다.

참고 항목:

SPLIT_PART

구문

STRTOK(<string> [,<delimiter>] [,<partNumber>])
Copy

인자

필수:

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);
Copy
+-------------------------+
| STRTOK('A.B.C', '.', 1) |
|-------------------------|
| a                       |
+-------------------------+

여러 구분 기호를 사용하여 다른 토큰 반환

이 예제에서는 구분 기호가 @``.``일 때 여러 구분 기호를 사용하여 첫 번째, 두 번째, 세 번째 토큰을 반환하는 방법을 보여줍니다.

SELECT STRTOK('user@snowflake.com', '@.', 1);
Copy
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 1) |
|---------------------------------------|
| user                                  |
+---------------------------------------+
SELECT STRTOK('user@snowflake.com', '@.', 2);
Copy
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 2) |
|---------------------------------------|
| snowflake                             |
+---------------------------------------+
SELECT STRTOK('user@snowflake.com', '@.', 3);
Copy
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 3) |
|---------------------------------------|
| com                                   |
+---------------------------------------+

문자열에서 가능한 마지막 토큰을 지나 인덱싱하는 방법 표시

다음 예제에서는 문자열에서 가능한 마지막 토큰을 지나 인덱싱할 때 발행하는 상황을 보여줍니다.

SELECT STRTOK('user@snowflake.com.', '@.', 4);
Copy
+----------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM.', '@.', 4) |
|----------------------------------------|
| NULL                                   |
+----------------------------------------+

첫 번째 요소가 문자열의 끝을 지나칠 수 있는 방법 표시

이 예제에서 입력 문자열은 비어 있으며 요소가 없습니다. 따라서 첫 번째 요소는 문자열의 끝을 지나고 함수는 빈 문자열 대신 NULL을 반환합니다.

SELECT STRTOK('', '', 1);
Copy
+-------------------+
| STRTOK('', '', 1) |
|-------------------|
| NULL              |
+-------------------+

빈 구분 기호로 STRTOK 호출

다음은 빈 구분 기호 문자열의 예입니다.

SELECT STRTOK('a.b', '', 1);
Copy
+----------------------+
| STRTOK('A.B', '', 1) |
|----------------------|
| a.b                  |
+----------------------+

인자의 NULL 값 표시

다음 예제에서는 각 인자에 대해 NULL 값을 지정합니다.

SELECT STRTOK(NULL, '.', 1);
Copy
+----------------------+
| STRTOK(NULL, '.', 1) |
|----------------------|
| NULL                 |
+----------------------+
SELECT STRTOK('a.b', NULL, 1);
Copy
+------------------------+
| STRTOK('A.B', NULL, 1) |
|------------------------|
| NULL                   |
+------------------------+
SELECT STRTOK('a.b', '.', NULL);
Copy
+--------------------------+
| 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;
Copy
+----------+----------+----------+----------+-----------------+--------------+--------------+
| 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|              |
+----------+----------+----------+----------+-----------------+--------------+--------------+