- 类别:
字符串和二进制函数 (通用)
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('|a||', '|'); +--------------------+ | SPLIT('|A||', '|') | |--------------------| | [ | | "", | | "a", | | "", | | "" | | ] | +--------------------+
使用 SPLIT 的结果通过 LATERAL FLATTEN 构造从单个字符串生成多个记录。FLATTEN 是一个表函数,它采用 VARIANT、OBJECT 或 ARRAY 列并生成横向视图(即包含引用 FROM 子句中其他表的关联的内联视图):
SELECT * FROM persons; ------+---------------------+ NAME | CHILDREN | ------+---------------------+ Mark | Marky,Mark Jr,Maria | John | Johnny,Jane | ------+---------------------+ SELECT name, C.value::string AS childName FROM persons, LATERAL FLATTEN(input=>split(children, ',')) C; ------+-----------+ NAME | CHILDNAME | ------+-----------+ John | Johnny | John | Jane | Mark | Marky | Mark | Mark Jr | Mark | Maria | ------+-----------+