SPLIT_BY_STRING
描述
SPLIT_BY_STRING 函数将输入字符串按照指定的分隔符字符串拆分成字符串数组。该函数支持多字符分隔符,与某些数据库的类似函数在空字符串处理上可能存在差异。
语法
SPLIT_BY_STRING(<str>, <separator>)
参数
| 参数 | 说明 |
|---|---|
<str> | 需要分割的源字符串。类型:VARCHAR |
<separator> | 用于分割的分隔符字符串。类型:VARCHAR |
返回值
返回 ARRAY
分割规则:
- 按照 separator 在 str 中出现的位置进行分割
- 连续的分隔符会产生空字符串元素
- 字符串开头或结尾的分隔符会产生空字符串元素
特殊情况:
- 如果任意参数为 NULL,返回 NULL
- 如果 str 为空字符串,返回包含一个空字符串的数组 [""]
- 如果 separator 为空字符串,str 会按字符进行拆分(每个字符成为数组的一个元素)
- 如果 separator 在 str 中不存在,返回包含原字符串的数组
- 如果 str 只包含分隔符,根据分隔符数量返回相应数量的空字符串
示例
- 基本字符串分割
SELECT SPLIT_BY_STRING('hello', 'l');
+-------------------------------+
| SPLIT_BY_STRING('hello', 'l') |
+-------------------------------+
| ["he", "", "o"] |
+-------------------------------+
- 空分隔符(按字符分割)
SELECT SPLIT_BY_STRING('hello', '');
+------------------------------+
| SPLIT_BY_STRING('hello', '') |
+------------------------------+
| ["h", "e", "l", "l", "o"] |
+------------------------------+
- 多字符分隔符
SELECT SPLIT_BY_STRING('apple::banana::cherry', '::');
+------------------------------------------------+
| SPLIT_BY_STRING('apple::banana::cherry', '::') |
+------------------------------------------------+
| ["apple", "banana", "cherry"] |
+------------------------------------------------+
- NULL 值处理
SELECT SPLIT_BY_STRING(NULL, ','), SPLIT_BY_STRING('hello', NULL);
+-----------------------------+----------------------------------+
| SPLIT_BY_STRING(NULL, ',') | SPLIT_BY_STRING('hello', NULL) |
+-----------------------------+----------------------------------+
| NULL | NULL |
+-----------------------------+----------------------------------+
- 空字符串处理
SELECT SPLIT_BY_STRING('', ','), SPLIT_BY_STRING('hello', 'xyz');
+---------------------------+----------------------------------+
| SPLIT_BY_STRING('', ',') | SPLIT_BY_STRING('hello', 'xyz') |
+---------------------------+----------------------------------+
| [""] | ["hello"] |
+---------------------------+----------------------------------+
- 连续分隔符
SELECT SPLIT_BY_STRING('a,,b,c', ',');
+-------------------------------+
| SPLIT_BY_STRING('a,,b,c', ',') |
+-------------------------------+
| ["a", "", "b", "c"] |
+-------------------------------+
- 开头和结尾的分隔符
SELECT SPLIT_BY_STRING(',a,b,', ',');
+------------------------------+
| SPLIT_BY_STRING(',a,b,', ',') |
+------------------------------+
| ["", "a", "b", ""] |
+------------------------------+
- 只包含分隔符
SELECT SPLIT_BY_STRING('|||', '|');
+----------------------------+
| SPLIT_BY_STRING('|||', '|') |
+----------------------------+
| ["", "", "", ""] |
+----------------------------+
- UTF-8 字符分割
SELECT SPLIT_BY_STRING('ṭṛì ḍḍumai ṭṛì', ' ');
+--------------------------------------+
| SPLIT_BY_STRING('ṭṛì ḍḍumai ṭṛì', ' ') |
+--------------------------------------+
| ["ṭṛì", "ḍḍumai", "ṭṛì"] |
+--------------------------------------+
- 不存在的分隔符
SELECT SPLIT_BY_STRING('hello world', 'xyz');
+--------------------------------------+
| SPLIT_BY_STRING('hello world', 'xyz') |
+--------------------------------------+
| ["hello world"] |
+--------------------------------------+