STRTOK
STRTOK
주어진 문자열을 토큰화하고 요청한 부분을 돌려주는 함수예요. Linux의 strtok()처럼 빈 문자열을 토큰으로 반환하지 않는 점이 특징이에요.
출처: 공식 문서
본문
주어진 문자열을 토큰화하고 요청한 부분을 반환합니다.
참고 (See also): SPLIT_PART
구문 (Syntax)
STRTOK(<string> [,<delimiter>] [,<partNumber>])
인자 (Arguments)
필수 (Required):
string
토큰화할 텍스트입니다.
선택 (Optional):
delimiter
토큰화할 구분자 집합을 나타내는 텍스트입니다. 구분자 문자열의 각 문자는 별개의 구분자입니다. 예를 들어 구분자가 '@.'이면 @와 . 둘 다 구분자로 취급됩니다. 이 동작은 전체 구분자를 단일 구분자 문자열로 취급하는 SPLIT_PART와 다릅니다.
- 구분자가 비어 있고 문자열도 비어 있으면 함수는 NULL을 반환합니다.
- 구분자가 비어 있고 문자열이 비어 있지 않으면 전체 문자열이 하나의 토큰으로 취급됩니다.
기본값: 공백 문자 하나
partNumber
요청한 토큰으로, 1부터 시작합니다(첫 번째 토큰이 토큰 0이 아니라 토큰 1). 토큰 번호가 범위를 벗어나면 NULL이 반환됩니다. 기본값: 1
반환값 (Returns)
반환값의 데이터 타입은 VARCHAR입니다.
요청한 부분이 존재하지 않거나 어떤 인자든 NULL이면 NULL이 반환됩니다.
사용 참고 (Usage notes)
Linux strtok()과 비슷하게, STRTOK는 빈 문자열을 토큰으로 결코 반환하지 않습니다. 이 동작은 입력 문자열이 구분자로 시작·끝나거나 구분자가 연속될 때 빈 문자열을 부분으로 반환할 수 있는 SPLIT_PART와 다릅니다.
예제 (Examples)
다음 예제들은 STRTOK 함수를 호출합니다.
문자열에서 첫 번째 토큰 반환하기
다음 간단한 예제는 문자열의 첫 번째 토큰을 반환하기 위해 STRTOK를 호출합니다:
SELECT STRTOK('a.b.c', '.', 1);
+-------------------------+
| STRTOK('A.B.C', '.', 1) |
|-------------------------|
| a |
+-------------------------+
여러 구분자를 사용해 다른 토큰 반환하기
다음 예제는 구분자가 @와 .일 때 첫 번째, 두 번째, 세 번째 토큰을 반환하기 위해 여러 구분자를 사용하는 방법을 보여줍니다:
SELECT STRTOK('[email protected]', '@.', 1);
+---------------------------------------+
| STRTOK('[email protected]', '@.', 1) |
|---------------------------------------|
| user |
+---------------------------------------+
SELECT STRTOK('[email protected]', '@.', 2);
+---------------------------------------+
| STRTOK('[email protected]', '@.', 2) |
|---------------------------------------|
| snowflake |
+---------------------------------------+
SELECT STRTOK('[email protected]', '@.', 3);
+---------------------------------------+
| STRTOK('[email protected]', '@.', 3) |
|---------------------------------------|
| com |
+---------------------------------------+
문자열의 마지막 가능한 토큰을 넘어 인덱싱하기
다음 예제는 문자열의 마지막 가능한 토큰을 넘어 인덱싱할 때 어떤 일이 발생하는지 보여줍니다:
SELECT STRTOK('[email protected].', '@.', 4);
+----------------------------------------+
| STRTOK('[email protected].', '@.', 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는 구분자 문자열 '|-'의 각 문자를 별개의 구분자로 취급해 모든 '|'와 '-' 문자에서 분리합니다. 반면 SPLIT_PART는 전체 구분자 문자열 '|-'를 단일 구분자로 취급하므로, 해당 정확한 시퀀스가 나타나는 곳에서만 분리합니다:
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| |
+----------+----------+----------+----------+-----------------+--------------+--------------+
더 알아보기 (Learn more)
- SPLIT_PART — 전체 구분자로 분리
- SPLIT — 배열로 분리
- 문자열 함수