字符串拆分函数
splitByChar
根据指定字符将字符串拆分为子字符串。使用一个常量字符串 separator
,该字符串由一个字符组成。
返回所选子字符串的数组。如果分隔符出现在字符串的开头或结尾,或者有多个连续的分隔符,可能会选择到空子字符串。
语法
参数
separator
— 该分隔符应包含一个字符。String。s
— 要拆分的字符串。String。max_substrings
— 可选的Int64
,默认为 0。如果max_substrings
> 0,则返回的数组将最多包含max_substrings
个子字符串,否则该函数将返回尽可能多的子字符串。
返回值
参数 max_substrings
的行为从 ClickHouse v22.11 开始发生了变化。在较早版本中,max_substrings > 0
意味着进行了 max_substring
次拆分,并将字符串的其余部分作为列表的最后一个元素返回。
例如:
- 在 v22.10:
SELECT splitByChar('=', 'a=b=c=d', 2);
返回['a','b','c=d']
- 在 v22.11:
SELECT splitByChar('=', 'a=b=c=d', 2);
返回['a','b']
通过设置
splitby_max_substrings_includes_remaining_string
可以实现类似于 ClickHouse 预 v22.11 的行为。
SELECT splitByChar('=', 'a=b=c=d', 2) SETTINGS splitby_max_substrings_includes_remaining_string = 1 -- ['a', 'b=c=d']
示例
结果:
splitByString
根据字符串拆分字符串。它使用一个由多个字符组成的常量字符串 separator
作为分隔符。如果字符串 separator
为空,则将字符串 s
拆分为单字符数组。
语法
参数
separator
— 分隔符。String。s
— 要拆分的字符串。String。max_substrings
— 可选的Int64
,默认为 0。当max_substrings
> 0 时,返回的子字符串将不超过max_substrings
,否则该函数将返回尽可能多的子字符串。
返回值
空子字符串可能会在以下情况下选择:
- 非空分隔符出现在字符串的开头或结尾;
- 有多个连续的非空分隔符;
- 原始字符串
s
为空且分隔符不为空。
设置 splitby_max_substrings_includes_remaining_string(默认值:0)可以控制当参数 max_substrings
> 0 时,剩余字符串是否包括在结果数组的最后一个元素中。
示例
结果:
结果:
splitByRegexp
根据正则表达式拆分字符串。它使用正则表达式字符串 regexp
作为分隔符。如果 regexp
为空,则将字符串 s
拆分为单字符数组。如果未找到此正则表达式的匹配项,则字符串 s
不会被拆分。
语法
参数
regexp
— 正则表达式。常量。String 或 FixedString。s
— 要拆分的字符串。String。max_substrings
— 可选的Int64
,默认为 0。当max_substrings
> 0 时,返回的子字符串将不超过max_substrings
,否则该函数将返回尽可能多的子字符串。
返回值
空子字符串可能会在以下情况下选择:
- 非空正则表达式匹配出现在字符串的开头或结尾;
- 有多个连续的非空正则表达式匹配;
- 原始字符串
s
为空且正则表达式不为空。
设置 splitby_max_substrings_includes_remaining_string(默认值:0)可以控制当参数 max_substrings
> 0 时,剩余字符串是否包括在结果数组的最后一个元素中。
示例
结果:
结果:
splitByWhitespace
根据空白字符拆分字符串。 返回所选子字符串的数组。
语法
参数
s
— 要拆分的字符串。String。max_substrings
— 可选的Int64
,默认为 0。当max_substrings
> 0 时,返回的子字符串将不超过max_substrings
,否则该函数将返回尽可能多的子字符串。
返回值
设置 splitby_max_substrings_includes_remaining_string(默认值:0)可以控制当参数 max_substrings
> 0 时,剩余字符串是否包括在结果数组的最后一个元素中。
示例
结果:
splitByNonAlpha
根据空白和标点字符拆分字符串。 返回所选子字符串的数组。
语法
参数
s
— 要拆分的字符串。String。max_substrings
— 可选的Int64
,默认为 0。当max_substrings
> 0 时,返回的子字符串将不超过max_substrings
,否则该函数将返回尽可能多的子字符串。
返回值
设置 splitby_max_substrings_includes_remaining_string(默认值:0)可以控制当参数 max_substrings
> 0 时,剩余字符串是否包括在结果数组的最后一个元素中。
示例
arrayStringConcat
使用分隔符连接数组中列出的值的字符串表示形式。separator
是一个可选参数:常量字符串,默认值为空字符串。
返回连接后的字符串。
语法
示例
结果:
alphaTokens
从 a-z 和 A-Z 范围内选择连续字节的子字符串。返回子字符串的数组。
语法
别名: splitByAlpha
参数
s
— 要拆分的字符串。String。max_substrings
— 可选的Int64
,默认为 0。当max_substrings
> 0 时,返回的子字符串将不超过max_substrings
,否则该函数将返回尽可能多的子字符串。
返回值
设置 splitby_max_substrings_includes_remaining_string(默认值:0)可以控制当参数 max_substrings
> 0 时,剩余字符串是否包括在结果数组的最后一个元素中。
示例
extractAllGroups
从正则表达式匹配的非重叠子字符串中提取所有组。
语法
参数
text
— String 或 FixedString。regexp
— 正则表达式。常量。String 或 FixedString。
返回值
- 如果函数找到至少一个匹配组,它将返回
Array(Array(String))
列,按 group_id 聚合(1 到 N,其中 N 是regexp
中捕获组的数量)。如果没有匹配组,它将返回一个空数组。Array。
示例
结果:
ngrams
将 UTF-8 字符串拆分为 ngramsize
字符的 n-grams。
语法
参数
string
— 字符串。String 或 FixedString。ngramsize
— n-gram 的大小。UInt。
返回值
示例
结果:
tokens
使用非字母数字 ASCII 字符作为分隔符将字符串拆分为标记。
参数
input_string
— 任何字节集,表示为 String 数据类型对象。
返回值
- 输入字符串的标记结果数组。Array。
示例
结果: