- 类别:
字符串和二进制函数 (通用)
SPLIT¶
使用给定的分隔符拆分给定的字符串,并在字符串数组中返回结果。
源字符串中的连续拆分字符串,或源字符串的开头或结尾存在拆分字符串,会导致输出中出现空字符串。空分隔符字符串将生成仅包含源字符串的数组。如果任一参数为 NULL,则返回 NULL。
您可以在结果上使用 对数组 进行操作的函数和结构,例如 FLATTEN、ARRAY_SIZE 以及 按索引位置访问。
- 另请参阅:
语法¶
SPLIT(<string>, <separator>)
实参¶
string要拆分为多个部分的文本。
separator用于拆分字符串的文本。
返回¶
返回值的数据类型是 ARRAY。
排序规则详细信息¶
此函数不支持以下排序规则规范:
pi(不区分标点符号)。cs-ai(区分大小写,不区分重音)。
输出数组中的值不包括排序规则规范,因此不支持进一步的排序规则操作。
示例¶
将本地主机 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", |
| "", |
| "" |
| ] |
+--------------------+
使用 SPLIT 的结果,通过 LATERAL FLATTEN 结构从单个字符串生成多条记录。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 |
+------------+-----------+