- 类别:
字符串和二进制函数 (通用)
STRTOK¶
将给定的字符串标记化,然后返回请求的部分。
如果请求的部分不存在,则返回 NULL。如果任何参数为 NULL,则返回 NULL。
- 另请参阅:
语法¶
STRTOK(<string> [,<delimiter>] [,<partNr>])
实参¶
必填:
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 | +-------------------------+
此示例展示在分隔符为“@”和“.”时,如何使用多个分隔符返回第一个、第二个和第三个令牌。
SELECT STRTOK('user@snowflake.com', '@.', 1); +---------------------------------------+ | STRTOK('USER@SNOWFLAKE.COM', '@.', 1) | |---------------------------------------| | user | +---------------------------------------+SELECT STRTOK('user@snowflake.com', '@.', 2); +---------------------------------------+ | STRTOK('USER@SNOWFLAKE.COM', '@.', 2) | |---------------------------------------| | snowflake | +---------------------------------------+SELECT STRTOK('user@snowflake.com', '@.', 3); +---------------------------------------+ | STRTOK('USER@SNOWFLAKE.COM', '@.', 3) | |---------------------------------------| | com | +---------------------------------------+
此示例演示,如果您尝试的索引超过字符串中最后一个可能的令牌,会发生什么:
select strtok('user@snowflake.com.', '@.', 4); +----------------------------------------+ | STRTOK('USER@SNOWFLAKE.COM.', '@.', 4) | |----------------------------------------| | NULL | +----------------------------------------+在此示例中,因为输入字符串为空,所以有 0 个元素,并且元素 #1 超过了字符串的结尾,因此函数返回 NULL,而不是空字符串:
select strtok('', '', 1); +-------------------+ | STRTOK('', '', 1) | |-------------------| | NULL | +-------------------+
下面是采用空字符串的示例:
select strtok('a.b', '', 1); +----------------------+ | STRTOK('A.B', '', 1) | |----------------------| | a.b | +----------------------+
下面是为每个参数采用 NULL 值的示例:
select strtok(NULL, '.', 1); +----------------------+ | STRTOK(NULL, '.', 1) | |----------------------| | NULL | +----------------------+select strtok('a.b', NULL, 1); +------------------------+ | STRTOK('A.B', NULL, 1) | |------------------------| | NULL | +------------------------+select strtok('a.b', '.', NULL); +--------------------------+ | STRTOK('A.B', '.', NULL) | |--------------------------| | NULL | +--------------------------+