跳到主要内容
跳到主要内容

字符串拆分函数

splitByChar

根据指定字符将字符串拆分为子字符串。使用一个常量字符串 separator,该字符串由一个字符组成。 返回所选子字符串的数组。如果分隔符出现在字符串的开头或结尾,或者有多个连续的分隔符,可能会选择到空子字符串。

语法

参数

  • separator — 该分隔符应包含一个字符。String
  • s — 要拆分的字符串。String
  • max_substrings — 可选的 Int64,默认为 0。如果 max_substrings > 0,则返回的数组将最多包含 max_substrings 个子字符串,否则该函数将返回尽可能多的子字符串。

返回值

  • 所选子字符串的数组。Array(String)。

    当出现以下情况时,可能会选择到空子字符串:

  • 分隔符出现在字符串的开头或结尾;

  • 有多个连续的分隔符;

  • 原始字符串 s 为空。

备注

参数 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 — 正则表达式。常量。StringFixedString
  • 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

从正则表达式匹配的非重叠子字符串中提取所有组。

语法

参数

返回值

  • 如果函数找到至少一个匹配组,它将返回 Array(Array(String)) 列,按 group_id 聚合(1 到 N,其中 N 是 regexp 中捕获组的数量)。如果没有匹配组,它将返回一个空数组。Array

示例

结果:

ngrams

将 UTF-8 字符串拆分为 ngramsize 字符的 n-grams。

语法

参数

返回值

示例

结果:

tokens

使用非字母数字 ASCII 字符作为分隔符将字符串拆分为标记。

参数

  • input_string — 任何字节集,表示为 String 数据类型对象。

返回值

  • 输入字符串的标记结果数组。Array

示例

结果: