SPLIT
SPLIT
주어진 문자열을 지정한 구분자로 나누고 문자열 배열로 결과를 반환해요.
원본 문자열에서 구분자가 연속으로 나타나거나 문자열의 시작이나 끝에 구분자가 있으면 출력에 빈 문자열이 생겨요. 빈 구분자 문자열은 원본 문자열만 담긴 배열을 결과로 내요. 두 매개변수 중 하나라도 NULL이면 NULL을 반환해요.
결과에 대해 FLATTEN, ARRAY_SIZE, 인덱스 위치 접근 등 배열을 대상으로 동작하는 함수와 구문을 사용할 수 있어요.
본문
구문
SPLIT(<string>, <separator>)
인자
string
- 여러 부분으로 나눌 텍스트예요.
separator
- 문자열을 나누는 기준이 될 텍스트예요.
반환
반환되는 값의 데이터 타입은 ARRAY예요.
데이터 정렬(collation) 세부 사항
이 함수는 다음 데이터 정렬 사양을 지원하지 않아요.
- pi(문장 부호 미구분, punctuation-insensitive).
- cs-ai(대소문자 구분, 악센트 미구분).
출력 배열의 값에는 데이터 정렬 사양이 포함되지 않으므로 추가 데이터 정렬 작업을 지원하지 않아요.
예제
로컬 호스트 IP 주소 127.0.0.1을 네 부분 각각으로 이루어진 배열로 나눠요.
SELECT SPLIT('127.0.0.1', '.');
+-------------------------+
| SPLIT('127.0.0.1', '.') |
|-------------------------|
| [ |
| "127", |
| "0", |
| "0", |
| "1" |
| ] |
+-------------------------+
반환된 배열의 첫 번째 요소를 인덱스 위치로 접근해요.
SELECT SPLIT('127.0.0.1', '.')[0];
+----------------------------+
| SPLIT('127.0.0.1', '.')[0] |
|----------------------------|
| "127" |
+----------------------------+
세로 막대를 구분자로 포함하는 문자열을 나누면 빈 문자열이 포함된 출력이 반환돼요.
SELECT SPLIT('%a%|', '|');
+--------------------+
| SPLIT('|A||', '|') |
|--------------------|
| [ |
| "", |
| "a", |
| "", |
| "" |
| ] |
+--------------------+
SPLIT의 결과를 사용해 LATERAL FLATTEN 구문으로 단일 문자열에서 여러 레코드를 생성해요. FLATTEN은 VARIANT, OBJECT 또는 ARRAY 열을 받아 lateral view(FROM 절에서 앞에 오는 다른 테이블을 참조하는 상관관계를 포함하는 인라인 뷰)를 만드는 테이블 함수예요.
CREATE TABLE split_test_names(first_name VARCHAR, children VARCHAR);
INSERT INTO split_test_names values
('Mark', 'Marky,Mike,Maria'),
('John', 'Johnny,Jane');
SELECT * FROM split_test_names;
+------------+------------------+
| FIRST_NAME | CHILDREN |
|------------+------------------|
| Mark | Marky,Mike,Maria |
| John | Johnny,Jane |
+------------+------------------+
SELECT first_name, C.value::STRING AS childname
FROM split_test_names,
LATERAL FLATTEN(INPUT=>SPLIT(children, ',')) C;
+------------+-----------+
| FIRST_NAME | CHILDNAME |
|------------+-----------|
| Mark | Marky |
| Mark | Mike |
| Mark | Maria |
| John | Johnny |
| John | Jane |
+------------+-----------+
더 알아보기
- SPLIT_PART — 구분자로 문자열을 나누고 일부를 반환하는 함수
- Snowflake 문자열 및 이진 함수