类别:

字符串和二进制函数 (通用)

SPLIT

使用给定的分隔符拆分给定的字符串,并在字符串数组中返回结果。

源字符串中的连续拆分字符串,或源字符串的开头或结尾存在拆分字符串,会导致输出中出现空字符串。空分隔符字符串将生成仅包含源字符串的数组。如果任一参数为 NULL,则返回 NULL。

结果可以与对半结构化数据(例如 FLATTENARRAY_SIZE)进行操作的函数和构造一起使用。

另请参阅:

SPLIT_PART

语法

SPLIT(<string>, <separator>)
Copy

实参

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"                   |
| ]                       |
+-------------------------+
Copy

拆分包含垂直线的字符串作为分隔符(请注意,输出将包含空字符串):

SELECT SPLIT('|a||', '|');

+--------------------+
| SPLIT('|A||', '|') |
|--------------------|
| [                  |
|   "",              |
|   "a",             |
|   "",              |
|   ""               |
| ]                  |
+--------------------+
Copy

使用 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     |
------+-----------+
Copy
语言: 中文