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

字符串分割函数

注意

以下文档由 system.functions 系统表自动生成。

alphaTokens

引入版本:v1.1

a-zA-Z 范围中选择连续字节的子字符串,并返回所选子字符串的数组。

语法

alphaTokens(s[, max_substrings])

别名:splitByAlpha

参数

  • s — 要分割的字符串。String
  • max_substrings — 可选。当 max_substrings > 0 时,返回的子字符串数量不超过 max_substrings,否则函数将返回尽可能多的子字符串。Int64

返回值

返回 s 的所选子字符串数组。Array(String)

示例

使用示例

SELECT alphaTokens('abca1abc');
┌─alphaTokens('abca1abc')─┐
│ ['abca','abc']          │
└─────────────────────────┘

arrayStringConcat

引入版本:v1.1

将数组中各元素的字符串表示形式使用指定的分隔符连接起来。分隔符为可选参数,默认为空字符串。

语法

arrayStringConcat(arr[, separator])

参数

  • arr — 要连接的数组。Array(T)
  • separator — 可选参数。分隔符字符串。默认为空字符串。const String

返回值

返回连接后的字符串。String

示例

使用示例

SELECT arrayStringConcat(['12/05/2021', '12:50:00'], ' ') AS DateString;
┌─DateString──────────┐
│ 12/05/2021 12:50:00 │
└─────────────────────┘

extractAllGroupsVertical

引入版本:v20.5

使用正则表达式匹配字符串中的所有分组,返回一个二维数组,其中每个数组包含一次匹配中所有捕获分组的内容,按照匹配在输入字符串中出现的顺序排列。

语法

extractAllGroupsVertical(s, regexp)

别名:extractAllGroups

参数

返回值

返回一个二维数组,其中每个内部数组包含一次匹配中的所有捕获分组。每次匹配生成一个数组,其元素按顺序对应正则表达式中的捕获分组(分组 1、分组 2 等)。如果未找到匹配项,则返回空数组。Array(Array(String))

示例

使用示例

WITH '< Server: nginx
< Date: Tue, 22 Jan 2019 00:26:14 GMT
< Content-Type: text/html; charset=UTF-8
< Connection: keep-alive
' AS s
SELECT extractAllGroupsVertical(s, '< ([\\w\\-]+): ([^\\r\\n]+)');
[['Server','nginx'],['Date','Tue, 22 Jan 2019 00:26:14 GMT'],['Content-Type','text/html; charset=UTF-8'],['Connection','keep-alive']]

ngrams

引入版本:v21.11

将 UTF-8 字符串拆分为包含 ngramsize 个符号的 n-gram。

语法

ngrams(s, ngram_size)

参数

返回值

返回包含 n-gram 的数组。Array(String)

示例

使用示例

SELECT ngrams('ClickHouse', 3);
['Cli','lic','ick','ckH','kHo','Hou','ous','use']

splitByChar

引入版本:v1.1

将由指定的单字符常量字符串 separator 分隔的字符串拆分为子字符串数组。 如果分隔符出现在字符串的开头或结尾,或者存在多个连续的分隔符,则可能会产生空子字符串。

注意

设置 splitby_max_substrings_includes_remaining_string(默认值:0)用于控制当参数 max_substrings > 0 时,是否将剩余字符串包含在结果数组的最后一个元素中。

在以下情况下可能会产生空子字符串:

  • 分隔符出现在字符串的开头或结尾
  • 存在多个连续的分隔符
  • 原始字符串 s 为空

语法

splitByChar(separator, s[, max_substrings])

参数

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

返回值

返回由选定子字符串组成的数组。Array(String)

示例

使用示例

SELECT splitByChar(',', '1,2,3,abcde');
┌─splitByChar(⋯2,3,abcde')─┐
│ ['1','2','3','abcde']    │
└──────────────────────────┘

splitByNonAlpha

引入版本:v21.9

将字符串按空格和标点符号分隔并拆分为子字符串数组。

注意

设置 splitby_max_substrings_includes_remaining_string(默认值:0)用于控制当参数 max_substrings > 0 时,是否将剩余字符串包含在结果数组的最后一个元素中。

语法

splitByNonAlpha(s[, max_substrings])

参数

  • s — 要拆分的字符串。String
  • max_substrings — 可选参数。当 max_substrings > 0 时,返回的子字符串数量不超过 max_substrings,否则函数将返回尽可能多的子字符串。默认值:0Int64

返回值

返回 s 拆分后的子字符串数组。Array(String)

示例

使用示例

SELECT splitByNonAlpha('[email protected]');
['user','domain','com']

splitByRegexp

引入版本:v21.6

根据提供的正则表达式将字符串拆分为子字符串数组。 如果提供的正则表达式为空,则将字符串拆分为单个字符的数组。 如果正则表达式未找到匹配项,则字符串不会被拆分。

在以下情况下可能会产生空子字符串:

  • 非空正则表达式在字符串的开头或结尾匹配
  • 存在多个连续的非空正则表达式匹配
  • 原始字符串为空而正则表达式不为空。
注意

设置 splitby_max_substrings_includes_remaining_string(默认值:0)控制当参数 max_substrings > 0 时,剩余字符串是否包含在结果数组的最后一个元素中。

语法

splitByRegexp(regexp, s[, max_substrings])

参数

  • regexp — 正则表达式。常量。StringFixedString
  • s — 要拆分的字符串。String
  • max_substrings — 可选。当 max_substrings > 0 时,返回的子字符串数量不超过 max_substrings,否则函数将返回尽可能多的子字符串。默认值:0Int64

返回值

返回 s 的子字符串数组。Array(String)

示例

使用示例

SELECT splitByRegexp('\\d+', 'a12bc23de345f');
┌─splitByRegex⋯c23de345f')─┐
│ ['a12bc23de345f']        │
└──────────────────────────┘

空正则表达式

SELECT splitByRegexp('', 'abcde');
┌─splitByRegexp('', 'abcde')─┐
│ ['a','b','c','d','e']      │
└────────────────────────────┘

splitByString

引入版本:v1.1

使用由多个字符组成的常量 separator 将字符串分割为子字符串数组。 如果 separator 为空字符串,则将字符串 s 分割为单个字符的数组。

在以下情况下可能会产生空子字符串:

  • 非空分隔符出现在字符串的开头或结尾
  • 存在多个连续的非空分隔符
  • 原始字符串 s 为空而分隔符不为空
注意

设置 splitby_max_substrings_includes_remaining_string(默认值:0)用于控制当参数 max_substrings > 0 时,是否将剩余字符串包含在结果数组的最后一个元素中。

语法

splitByString(separator, s[, max_substrings])

参数

  • separator — 分隔符。String
  • s — 要分割的字符串。String
  • max_substrings — 可选参数。当 max_substrings > 0 时,返回的子字符串数量不超过 max_substrings,否则函数将返回尽可能多的子字符串。默认值:0Int64

返回值

返回 s 的子字符串数组 Array(String)

示例

使用示例

SELECT splitByString(', ', '1, 2 3, 4,5, abcde');
┌─splitByStrin⋯4,5, abcde')─┐
│ ['1','2 3','4,5','abcde'] │
└───────────────────────────┘

空分隔符

SELECT splitByString('', 'abcde');
┌─splitByString('', 'abcde')─┐
│ ['a','b','c','d','e']      │
└────────────────────────────┘

splitByWhitespace

引入版本:v21.9

将由空白字符分隔的字符串拆分为子字符串数组。

注意

设置 splitby_max_substrings_includes_remaining_string(默认值:0)用于控制当参数 max_substrings > 0 时,是否将剩余字符串包含在结果数组的最后一个元素中。

语法

splitByWhitespace(s[, max_substrings])

参数

  • s — 要拆分的字符串。String
  • max_substrings — 可选参数。当 max_substrings > 0 时,返回的子字符串数量不超过 max_substrings,否则函数将返回尽可能多的子字符串。默认值:0Int64

返回值

返回 s 拆分后的子字符串数组。Array(String)

示例

使用示例

SELECT splitByWhitespace('  1!  a,  b.  ');
['1!','a,','b.']

tokens

引入版本:v21.11

使用指定的分词器将字符串拆分为标记(token)。 默认分词器使用非字母数字的 ASCII 字符作为分隔符。

对于 split 分词器,如果标记不构成前缀码,您可能希望匹配时优先使用较长的分隔符。 为此,请按长度降序传递分隔符。 例如,使用 separators = ['%21', '%'] 时,字符串 %21abc 将被分词为 ['abc'],而使用 separators = ['%', '%21'] 则会分词为 ['21ac'](这可能不是您想要的结果)。

语法

tokens(value[, tokenizer[, ngrams[, separators]]])

参数

  • value — 输入字符串。StringFixedString
  • tokenizer — 要使用的分词器。有效参数为 splitByNonAlphangramssplitByStringarraysparseGrams。可选参数,如果未显式设置,默认为 splitByNonAlphaconst String
  • ngrams — 仅当参数 tokenizerngrams 时相关:定义 n-gram 长度的可选参数。如果未显式设置,默认为 3const UInt8
  • separators — 仅当参数 tokenizersplit 时相关:定义分隔符字符串的可选参数。如果未显式设置,默认为 [' ']const Array(String)

返回值

返回从输入字符串生成的标记数组。Array

示例

默认分词器

SELECT tokens('test1,;\\\\ test2,;\\\\ test3,;\\\\   test4') AS tokens;
['test1','test2','test3','test4']

N-gram 分词器

SELECT tokens('abc def', 'ngrams', 3) AS tokens;
['abc','bc ','c d',' de','def']