类别:

:doc:`/sql-reference/functions-string`(通用)

SPLIT_PART

在指定字符处拆分给定的字符串,并返回请求的部分。

如果任何参数为 NULL,则返回 NULL。

小技巧

您可以使用搜索优化服务,提高用于调用此函数的查询的性能。有关详细信息,请参阅 搜索优化服务

另请参阅:

SPLIT

语法

SPLIT_PART(<string>, <delimiter>, <partNumber>)
Copy

实参

string

要拆分为多个部分的文本。

delimiter

表示要拆分的分隔符的文本。

partNumber

请求拆分的一部分(从 1 开始)。

如果该值为负数,则从字符串末尾向后计数。

使用说明

  • 如果 partNumber 超出范围,则返回的值为空字符串。

  • 如果字符串以分隔符开始或终止,则系统将分隔符之前或之后的空格分别视为拆分结果的有效部分。有关示例,请参阅下面的 示例 部分。

  • 如果 partNumber 为 0,则将其视为 1。换句话说,它获取拆分的第一个元素。为了避免混淆索引是从 1 开始还是从 0 开始,Snowflake 建议避免使用 0 作为 1 的同义词。

  • 如果分隔符是空字符串,则拆分后,返回的值是输入字符串(字符串未拆分)。

排序规则详细信息

The collation specifications of all input arguments must be compatible.

此函数不支持以下排序规则规范:

  • :code:`pi`(不区分标点符号)。

  • :code:`cs-ai`(区分大小写,不区分重音)。

示例

演示不同 partNumber 值返回的部分。

select  0, split_part('11.22.33', '.',  0) UNION
select  1, split_part('11.22.33', '.',  1) UNION
select  2, split_part('11.22.33', '.',  2) UNION
select  3, split_part('11.22.33', '.',  3) UNION
select  4, split_part('11.22.33', '.',  4) UNION
select -1, split_part('11.22.33', '.', -1) UNION
select -2, split_part('11.22.33', '.', -2) UNION
select -3, split_part('11.22.33', '.', -3) UNION
select -4, split_part('11.22.33', '.', -4)
;
+----+---------------------------------+
|  0 | SPLIT_PART('11.22.33', '.',  0) |
|----+---------------------------------|
|  0 | 11                              |
|  1 | 11                              |
|  2 | 22                              |
|  3 | 33                              |
|  4 |                                 |
| -1 | 33                              |
| -2 | 22                              |
| -3 | 11                              |
| -4 |                                 |
+----+---------------------------------+
Copy

返回本地主机 IP 地址 127.0.0.1 的第一部分和最后一部分:

SELECT SPLIT_PART('127.0.0.1', '.', 1), SPLIT_PART('127.0.0.1', '.', -1);
+---------------------------------+----------------------------------+
| SPLIT_PART('127.0.0.1', '.', 1) | SPLIT_PART('127.0.0.1', '.', -1) |
|---------------------------------+----------------------------------|
| 127                             | 1                                |
+---------------------------------+----------------------------------+
Copy

返回由竖线分隔的字符字符串的第一部分和第二部分。请注意,分隔符是输入字符串的第一部分,因此拆分后的第一个元素是空字符串。

SELECT SPLIT_PART('|a|b|c|', '|', 1), SPLIT_PART('|a|b|c|', '|', 2);
+-------------------------------+-------------------------------+
| SPLIT_PART('|A|B|C|', '|', 1) | SPLIT_PART('|A|B|C|', '|', 2) |
|-------------------------------+-------------------------------|
|                               | a                             |
+-------------------------------+-------------------------------+
Copy

以下示例显示了一个多字符分隔符:

SELECT SPLIT_PART('aaa--bbb-BBB--ccc', '--', 2);
+------------------------------------------+
| SPLIT_PART('AAA--BBB-BBB--CCC', '--', 2) |
|------------------------------------------|
| bbb-BBB                                  |
+------------------------------------------+
Copy

以下示例显示,如果分隔符为空字符串,则拆分后仍然只有一个字符串:

select  1, split_part('user@snowflake.com', '',  1) UNION
select -1, split_part('user@snowflake.com', '', -1) UNION
select  2, split_part('user@snowflake.com', '',  2) UNION
select -2, split_part('user@snowflake.com', '', -2);
+----+------------------------------------------+
|  1 | SPLIT_PART('USER@SNOWFLAKE.COM', '',  1) |
|----+------------------------------------------|
|  1 | user@snowflake.com                       |
| -1 | user@snowflake.com                       |
|  2 |                                          |
| -2 |                                          |
+----+------------------------------------------+
Copy
语言: 中文