최종 수정: 에
CONCAT_WS
설명
CONCAT_WS 함수(구분자를 사용한 연결)는 지정된 구분자로 여러 문자열 또는 배열을 연결합니다. CONCAT 함수와 달리, CONCAT_WS는 NULL 값을 자동으로 건너뛰고(빈 문자열은 건너뛰지 않음) NULL이 아닌 값 사이에 구분자를 삽입합니다. 이 함수는 문자열 인수 모드와 배열 인수 모드를 모두 지원하며, CSV 형식 생성, 경로 연결, 태그 목록 구성 등에 유용합니다.
구문
-- String mode
CONCAT_WS(<sep>, <str> [, <str> ...])
-- Array mode
CONCAT_WS(<sep>, <array> [, <array> ...])
매개변수
| 매개변수 | 설명 |
|---|---|
<sep> | 각 부분을 연결하는 데 사용할 구분자 문자열입니다. 타입: VARCHAR |
<str> | 연결할 문자열 인수입니다. 타입: VARCHAR |
<array> | 연결할 배열 인수입니다. 배열 요소는 문자열 타입이어야 합니다. 타입: ARRAY<VARCHAR> |
반환 값
구분자로 연결된 문자열을 나타내는 VARCHAR 타입을 반환합니다.
연결 규칙:
- 첫 번째 인수를 구분자로 사용하여 나머지 인수를 연결합니다.
- NULL 값은 자동으로 건너뛰지만 빈 문자열은 유지합니다.
- 문자열 인수 또는 배열 인수를 지원하지만 두 종류를 혼합할 수는 없습니다.
- 구분자와 내용에 UTF-8 멀티바이트 문자를 사용할 수 있습니다.
특수한 경우:
- 구분자가 NULL이면 NULL을 반환합니다.
- 연결할 인수가 모두 NULL이면 빈 문자열을 반환합니다.
- 배열 모드에서는 배열의 NULL 요소를 건너뛰지만 빈 문자열 요소는 유지합니다.
- 여러 배열 인수에 NULL 배열이 포함되어 있으면 빈 문자열을 반환합니다.
- 문자열 인수와 배열 인수를 혼합할 수 없습니다.
예제
- 기본 문자열 연결
SELECT CONCAT_WS(',', 'apple', 'banana', 'orange'), CONCAT_WS('-', 'hello', 'world');
+-------------------------------------------+----------------------------------+
| CONCAT_WS(',', 'apple', 'banana', 'orange') | CONCAT_WS('-', 'hello', 'world') |
+-------------------------------------------+----------------------------------+
| apple,banana,orange | hello-world |
+-------------------------------------------+----------------------------------+
- NULL 구분자 처리
SELECT CONCAT_WS(NULL, 'd', 'is'), CONCAT_WS('or', 'd', NULL, 'is');
+----------------------------+----------------------------------+
| CONCAT_WS(NULL, 'd', 'is') | CONCAT_WS('or', 'd', NULL, 'is') |
+----------------------------+----------------------------------+
| NULL | doris |
+----------------------------+----------------------------------+
- 빈 문자열 처리(빈 문자열 유지)
SELECT CONCAT_WS('|', 'hello', '', 'world', NULL), CONCAT_WS(',', '', 'test', '');
+--------------------------------------------+-------------------------------+
| CONCAT_WS('|', 'hello', '', 'world', NULL) | CONCAT_WS(',', '', 'test', '') |
+--------------------------------------------+-------------------------------+
| hello||world | ,test, |
+--------------------------------------------+-------------------------------+
- 모든 값이 NULL인 경우
SELECT CONCAT_WS('x', NULL, NULL), CONCAT_WS('-', NULL, NULL, NULL);
+----------------------------+---------------------------------+
| CONCAT_WS('x', NULL, NULL) | CONCAT_WS('-', NULL, NULL, NULL) |
+----------------------------+---------------------------------+
| | |
+----------------------------+---------------------------------+
- 배열 모드의 기본 사용법
SELECT CONCAT_WS('or', ['d', 'is']), CONCAT_WS('-', ['apple', 'banana', 'cherry']);
+------------------------------+--------------------------------------------+
| CONCAT_WS('or', ['d', 'is']) | CONCAT_WS('-', ['apple', 'banana', 'cherry']) |
+------------------------------+--------------------------------------------+
| doris | apple-banana-cherry |
+------------------------------+--------------------------------------------+
- 배열 내 NULL 값
SELECT CONCAT_WS('or', ['d', NULL, 'is']), CONCAT_WS(',', [NULL, 'a', 'b', NULL, 'c']);
+------------------------------------+------------------------------------------+
| CONCAT_WS('or', ['d', NULL, 'is']) | CONCAT_WS(',', [NULL, 'a', 'b', NULL, 'c']) |
+------------------------------------+------------------------------------------+
| doris | a,b,c |
+------------------------------------+------------------------------------------+
- 여러 배열 연결
SELECT CONCAT_WS('-', ['a', 'b'], ['c', NULL], ['d']), CONCAT_WS('|', ['x'], ['y', 'z']);
+------------------------------------------------+----------------------------------+
| CONCAT_WS('-', ['a', 'b'], ['c', NULL], ['d']) | CONCAT_WS('|', ['x'], ['y', 'z']) |
+------------------------------------------------+----------------------------------+
| a-b-c-d | x|y|z |
+------------------------------------------------+----------------------------------+
- 여러 배열 중 NULL 배열이 있는 경우
SELECT CONCAT_WS('-', ['a', 'b'], NULL, ['c', NULL], ['d']);
+-----------------------------------------------------+
| CONCAT_WS('-', ['a', 'b'], NULL, ['c', NULL], ['d']) |
+-----------------------------------------------------+
| |
+-----------------------------------------------------+
- UTF-8 멀티바이트 문자 처리
SELECT CONCAT_WS('x', 'ṭṛì', 'ḍḍumai'), CONCAT_WS('→', ['ṭṛì', 'ḍḍumai', 'hello']);
+-------------------------------+----------------------------------------------+
| CONCAT_WS('x', 'ṭṛì', 'ḍḍumai') | CONCAT_WS('→', ['ṭṛì', 'ḍḍumai', 'hello']) |
+-------------------------------+----------------------------------------------+
| ṭṛìxḍḍumai | ṭṛì→ḍḍumai→hello |
+-------------------------------+----------------------------------------------+
- CSV 형식 생성 및 경로 연결
SELECT CONCAT_WS(',', 'Name', 'Age', 'City'), CONCAT_WS('/', 'home', 'user', 'documents', 'file.txt');
+------------------------------------+--------------------------------------------------------+
| CONCAT_WS(',', 'Name', 'Age', 'City') | CONCAT_WS('/', 'home', 'user', 'documents', 'file.txt') |
+------------------------------------+--------------------------------------------------------+
| Name,Age,City | home/user/documents/file.txt |
+------------------------------------+--------------------------------------------------------+