카테고리:

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

SPLIT

주어진 구분 기호로 주어진 문자열을 분할하고 결과를 문자열 배열로 반환합니다.

소스 문자열에 연속적인 분할 문자열이 있거나 소스 문자열의 시작 또는 끝에 분할 문자열이 있으면 출력에 빈 문자열이 생성됩니다. 빈 구분 기호 문자열은 소스 문자열만 포함하는 배열을 생성합니다. 매개 변수 중 하나가 NULL인 경우, NULL이 반환됩니다.

결과에 대한 배열 <label-data_type_array>`을 처리하는 함수 및 구문을 사용할 수 있으며, 여기에는 :doc:`flatten, ARRAY_SIZE, :ref:`인덱스 위치를 통한 액세스 <label-accessing_array_by_index>`가 포함됩니다.

참고 항목:

SPLIT_PART

구문

SPLIT(<string>, <separator>)
Copy

인자

string

부분으로 분할할 텍스트입니다.

separator

문자열을 분할할 텍스트입니다.

반환

반환된 값의 데이터 타입은 ARRAY입니다.

데이터 정렬 세부 정보

이 함수는 다음과 같은 데이터 정렬 사양을 지원하지 않습니다.

  • pi (구두점 구분 안 함).

  • cs-ai (대/소문자 구분, 악센트 구분 안 함).

출력 배열의 값은 데이터 정렬 사양을 포함하지 않으므로 추가 데이터 정렬 작업을 지원하지 않습니다.

localhost IP 주소 127.0.0.1 을 네 부분으로 구성된 배열로 분할합니다.

SELECT SPLIT('127.0.0.1', '.');
Copy
+-------------------------+
| SPLIT('127.0.0.1', '.') |
|-------------------------|
| [                       |
|   "127",                |
|   "0",                  |
|   "0",                  |
|   "1"                   |
| ]                       |
+-------------------------+

인덱스 위치를 통해 반환된 배열의 첫 번째 요소에 액세스합니다.

SELECT SPLIT('127.0.0.1', '.')[0];
Copy
+----------------------------+
| SPLIT('127.0.0.1', '.')[0] |
|----------------------------|
| "127"                      |
+----------------------------+

세로선을 구분 기호로 포함하는 문자열을 분할하면 빈 문자열이 포함된 출력이 반환됩니다.

SELECT SPLIT('|a||', '|');
Copy
+--------------------+
| 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;
Copy
+------------+------------------+
| 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;
Copy
+------------+-----------+
| FIRST_NAME | CHILDNAME |
|------------+-----------|
| Mark       | Marky     |
| Mark       | Mike      |
| Mark       | Maria     |
| John       | Johnny    |
| John       | Jane      |
+------------+-----------+