최종 수정: 에
SPLIT_BY_REGEXP/REGEXP_SPLIT_TO_ARRAY
설명
SPLIT_BY_REGEXP 함수는 지정된 정규식 패턴을 기준으로 문자열을 문자열 배열로 분할합니다. SPLIT_BY_STRING과 달리 이 함수는 복잡한 정규식 매칭을 지원하므로 더 유연한 분할 규칙을 사용할 수 있습니다. 선택적으로 최대 분할 횟수를 제한할 수 있어 구조화된 텍스트 처리, 데이터 정제, 패턴 매칭에 유용합니다.
구문
SPLIT_BY_REGEXP(<str>, <pattern> [, <max_limit>])
매개변수
| 매개변수 | 설명 |
|---|---|
<str> | 분할할 원본 문자열입니다. 타입: VARCHAR |
<pattern> | 구분자로 사용할 정규식 패턴입니다. 타입: VARCHAR |
<max_limit> | 반환되는 배열의 최대 요소 수를 제한하는 선택적 매개변수입니다. 타입: INT |
반환값
정규식으로 분할된 문자열 배열을 나타내는 ARRAY
분할 규칙:
- 정규식 패턴으로 분할 지점을 찾습니다
- 표준 정규식 구문을 지원합니다
- 패턴이 빈 문자열이면 문자열을 개별 문자로 분할합니다
- 패턴과 일치하는 부분이 없으면 원본 문자열을 유일한 요소로 포함하는 배열을 반환합니다
- max_limit는 결과 배열의 최대 길이를 제한합니다
특수한 경우:
- 매개변수 중 하나라도 NULL이면 NULL을 반환합니다
- 문자열이 비어 있으면 빈 문자열을 유일한 요소로 포함하는 배열을 반환합니다
- 정규식이 빈 문자열이면 문자 단위로 분할합니다
- max_limit가 0이거나 음수이면 제한을 적용하지 않습니다
- 연속된 일치 항목은 빈 문자열 요소를 생성합니다
예제
- 빈 패턴으로 문자 단위 분할
SELECT SPLIT_BY_REGEXP('abcde', '');
+------------------------------+
| SPLIT_BY_REGEXP('abcde', '') |
+------------------------------+
| ["a", "b", "c", "d", "e"] |
+------------------------------+
- 숫자 패턴으로 분할
SELECT SPLIT_BY_REGEXP('a12bc23de345f', '\\d+');
+-----------------------------------------+
| SPLIT_BY_REGEXP('a12bc23de345f', '\d+') |
+-----------------------------------------+
| ["a", "bc", "de", "f"] |
+-----------------------------------------+
- NULL 값 처리
SELECT SPLIT_BY_REGEXP(NULL, '\\d+'), SPLIT_BY_REGEXP('test', NULL);
+--------------------------------+--------------------------------+
| SPLIT_BY_REGEXP(NULL, '\d+') | SPLIT_BY_REGEXP('test', NULL) |
+--------------------------------+--------------------------------+
| NULL | NULL |
+--------------------------------+--------------------------------+
- 빈 문자열 처리
SELECT SPLIT_BY_REGEXP('', ','), SPLIT_BY_REGEXP('hello', 'xyz');
+---------------------------+-------------------------------+
| SPLIT_BY_REGEXP('', ',') | SPLIT_BY_REGEXP('hello', 'xyz') |
+---------------------------+-------------------------------+
| [""] | ["hello"] |
+---------------------------+-------------------------------+
- 최대 제한 매개변수 사용
SELECT SPLIT_BY_REGEXP('a,b,c,d,e', ',', 3), SPLIT_BY_REGEXP('1-2-3-4-5', '-', 2);
+--------------------------------------+--------------------------------------+
| SPLIT_BY_REGEXP('a,b,c,d,e', ',', 3) | SPLIT_BY_REGEXP('1-2-3-4-5', '-', 2) |
+--------------------------------------+--------------------------------------+
| ["a", "b", "c,d,e"] | ["1", "2-3-4-5"] |
+--------------------------------------+--------------------------------------+
- 공백 문자 패턴
SELECT SPLIT_BY_REGEXP('hello world test', '\\s+'), SPLIT_BY_REGEXP('a\tb\nc\rd', '\\s');
+------------------------------------------+------------------------------------+
| SPLIT_BY_REGEXP('hello world test', '\s+') | SPLIT_BY_REGEXP('a\tb\nc\rd', '\s') |
+------------------------------------------+------------------------------------+
| ["hello", "world", "test"] | ["a", "b", "c", "d"] |
+------------------------------------------+------------------------------------+
- 특수 문자와 이스케이프 처리
SELECT SPLIT_BY_REGEXP('a.b.c.d', '\\.'), SPLIT_BY_REGEXP('x(y)z[w]', '[\\(\\)\\[\\]]');
+----------------------------------+--------------------------------------------+
| SPLIT_BY_REGEXP('a.b.c.d', '\.') | SPLIT_BY_REGEXP('x(y)z[w]', '[\(\)\[\]]') |
+----------------------------------+--------------------------------------------+
| ["a", "b", "c", "d"] | ["x", "y", "z", "w"] |
+----------------------------------+--------------------------------------------+
- 단어 경계와 복잡한 패턴
SELECT SPLIT_BY_REGEXP('TheQuickBrownFox', '[A-Z]'), SPLIT_BY_REGEXP('user@example.com', '@|\\.');
+------------------------------------------+-------------------------------------------+
| SPLIT_BY_REGEXP('TheQuickBrownFox', '[A-Z]') | SPLIT_BY_REGEXP('user@example.com', '@|\.') |
+------------------------------------------+-------------------------------------------+
| ["", "he", "uick", "rown", "ox"] | ["user", "example", "com"] |
+------------------------------------------+-------------------------------------------+
- UTF-8 멀티바이트 문자
SELECT SPLIT_BY_REGEXP('ṭṛì→ḍḍumai→hello', '→'), SPLIT_BY_REGEXP('αβγδε', '[βδ]');
+------------------------------------------+----------------------------------+
| SPLIT_BY_REGEXP('ṭṛì→ḍḍumai→hello', '→') | SPLIT_BY_REGEXP('αβγδε', '[βδ]') |
+------------------------------------------+----------------------------------+
| ["ṭṛì", "ḍḍumai", "hello"] | ["α", "γ", "ε"] |
+------------------------------------------+----------------------------------+
- 연속된 일치 항목과 빈 요소
SELECT SPLIT_BY_REGEXP('a,,b,c', ','), SPLIT_BY_REGEXP('123abc456def', '[a-z]+');
+-------------------------------+---------------------------------------+
| SPLIT_BY_REGEXP('a,,b,c', ',') | SPLIT_BY_REGEXP('123abc456def', '[a-z]+') |
+-------------------------------+---------------------------------------+
| ["a", "", "b", "c"] | ["123", "456", ""] |
+-------------------------------+---------------------------------------+
키워드
SPLIT_BY_REGEXP, SPLIT, REGEXP, REGEXP_SPLIT_TO_ARRAY