- 카테고리:
문자열 및 이진 함수 (일반)
SPLIT¶
주어진 구분 기호로 주어진 문자열을 분할하고 결과를 문자열 배열로 반환합니다.
소스 문자열에 연속적인 분할 문자열이 있거나 소스 문자열의 시작 또는 끝에 분할 문자열이 있으면 출력에 빈 문자열이 생성됩니다. 빈 구분 기호 문자열은 소스 문자열만 포함하는 배열을 생성합니다. 매개 변수 중 하나가 NULL인 경우, NULL이 반환됩니다.
결과에 대한 배열 <label-data_type_array>`을 처리하는 함수 및 구문을 사용할 수 있으며, 여기에는 :doc:`flatten, ARRAY_SIZE, :ref:`인덱스 위치를 통한 액세스 <label-accessing_array_by_index>`가 포함됩니다.
- 참고 항목:
구문¶
SPLIT(<string>, <separator>)
인자¶
string부분으로 분할할 텍스트입니다.
separator문자열을 분할할 텍스트입니다.
반환¶
반환된 값의 데이터 타입은 ARRAY입니다.
데이터 정렬 세부 정보¶
이 함수는 다음과 같은 데이터 정렬 사양을 지원하지 않습니다.
pi(구두점 구분 안 함).cs-ai(대/소문자 구분, 악센트 구분 안 함).
출력 배열의 값은 데이터 정렬 사양을 포함하지 않으므로 추가 데이터 정렬 작업을 지원하지 않습니다.
예¶
localhost 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", |
| "", |
| "" |
| ] |
+--------------------+
LATERAL FLATTEN 구문을 사용하여 단일 문자열에서 여러 레코드를 생성하기 위해 SPLIT의 결과를 사용합니다. :doc:`flatten`은 VARIANT, OBJECT 또는 ARRAY 열을 받아 래터럴 뷰(즉, 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 |
+------------+-----------+