类别:

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

STRTOK

将给定的字符串标记化,然后返回请求的部分。

如果请求的部分不存在,则返回 NULL。如果任何参数为 NULL,则返回 NULL。

另请参阅:

SPLIT_PART

语法

STRTOK(<string> [,<delimiter>] [,<partNr>])
Copy

实参

必填:

string

要标记化的文本。

可选:

delimiter

用于表示要标记化的分隔符集的文本。分隔符字符串中的每个字符都是分隔符。如果分隔符为空,并且 string 也为空,则函数返回 NULL。如果分隔符为空,并且 string 为非空,则整个字符串被视为一个令牌。分隔符的默认值是一个空格字符。

partNr

请求的令牌,从 1 开始(即,第一个令牌是令牌号 1,而不是令牌号 0)。如果令牌号超出范围,则返回 NULL。默认值为 1。

返回

返回值的数据类型是 VARCHAR。

使用说明

如果字符串以分隔符开头或结尾,则系统分别将分隔符前面或后面的空格视为有效令牌。

类似于 Linux strtok(),STRTOK 永远不会返回空字符串作为令牌。

示例

下面是 STRTOK 的简单使用示例:

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

此示例展示在分隔符为“@”和“.”时,如何使用多个分隔符返回第一个、第二个和第三个令牌。

SELECT STRTOK('user@snowflake.com', '@.', 1);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 1) |
|---------------------------------------|
| user                                  |
+---------------------------------------+
Copy
SELECT STRTOK('user@snowflake.com', '@.', 2);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 2) |
|---------------------------------------|
| snowflake                             |
+---------------------------------------+
Copy
SELECT STRTOK('user@snowflake.com', '@.', 3);
+---------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM', '@.', 3) |
|---------------------------------------|
| com                                   |
+---------------------------------------+
Copy

此示例演示,如果您尝试的索引超过字符串中最后一个可能的令牌,会发生什么:

select strtok('user@snowflake.com.', '@.', 4);
+----------------------------------------+
| STRTOK('USER@SNOWFLAKE.COM.', '@.', 4) |
|----------------------------------------|
| NULL                                   |
+----------------------------------------+
Copy

在此示例中,因为输入字符串为空,所以有 0 个元素,并且元素 #1 超过了字符串的结尾,因此函数返回 NULL,而不是空字符串:

select strtok('', '', 1);
+-------------------+
| STRTOK('', '', 1) |
|-------------------|
| NULL              |
+-------------------+
Copy

下面是采用空字符串的示例:

select strtok('a.b', '', 1);
+----------------------+
| STRTOK('A.B', '', 1) |
|----------------------|
| a.b                  |
+----------------------+
Copy

下面是为每个参数采用 NULL 值的示例:

select strtok(NULL, '.', 1);
+----------------------+
| STRTOK(NULL, '.', 1) |
|----------------------|
| NULL                 |
+----------------------+
Copy
select strtok('a.b', NULL, 1);
+------------------------+
| STRTOK('A.B', NULL, 1) |
|------------------------|
| NULL                   |
+------------------------+
Copy
select strtok('a.b', '.', NULL);
+--------------------------+
| STRTOK('A.B', '.', NULL) |
|--------------------------|
| NULL                     |
+--------------------------+
Copy
语言: 中文