メインコンテンツへスキップ
メインコンテンツへスキップ

文字列分割関数

注記

以下のドキュメントは system.functions システムテーブルから生成されています。

alphaTokens

導入バージョン: v1.1

a-zおよびA-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つのマッチからキャプチャされたグループが含まれます。各マッチは、正規表現内のキャプチャグループ(グループ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

指定された1文字の定数文字列separatorで区切られた文字列を、部分文字列の配列に分割します。 セパレータが文字列の先頭または末尾に出現する場合、または連続する複数のセパレータが存在する場合、空の部分文字列が選択される可能性があります。

注記

設定splitby_max_substrings_includes_remaining_string(デフォルト: 0)は、引数max_substrings > 0の場合に、残りの文字列を結果配列の最後の要素に含めるかどうかを制御します。

次の場合に空の部分文字列が選択される可能性があります:

  • セパレータが文字列の先頭または末尾に出現する場合
  • 連続する複数のセパレータが存在する場合
  • 元の文字列sが空の場合

構文

splitByChar(separator, s[, max_substrings])

引数

  • separator — セパレータは1バイト文字である必要があります。String
  • s — 分割する文字列。String
  • max_substrings — オプション。max_substrings > 0の場合、返される配列には最大max_substrings個の部分文字列が含まれます。それ以外の場合、関数は可能な限り多くの部分文字列を返します。デフォルト値は0です。Int64

戻り値

選択された部分文字列の配列を返します。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 — 正規表現。定数。String または FixedString
  • 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

指定されたトークナイザーを使用して文字列をトークンに分割します。 デフォルトのトークナイザーは、非英数字のASCII文字を区切り文字として使用します。

splitトークナイザーの場合、トークンが接頭符号を形成しない場合、マッチング時により長い区切り文字を優先させることが望ましいでしょう。 そのためには、区切り文字を長さの降順で渡してください。 例えば、separators = ['%21', '%']の場合、文字列%21abc['abc']としてトークン化されますが、separators = ['%', '%21']の場合は['21abc']としてトークン化されます(これはおそらく意図したものではないでしょう)。

構文

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

引数

  • value — 入力文字列。StringまたはFixedString
  • tokenizer — 使用するトークナイザー。有効な引数はsplitByNonAlphangramssplitByStringarraysparseGramsです。省略可能で、明示的に設定されていない場合のデフォルトはsplitByNonAlphaです。const String
  • ngrams — 引数tokenizerngramsの場合のみ関連: ngramの長さを定義する省略可能なパラメータ。明示的に設定されていない場合のデフォルトは3です。const UInt8
  • separators — 引数tokenizersplitの場合のみ関連: 区切り文字列を定義する省略可能なパラメータ。明示的に設定されていない場合のデフォルトは[' ']です。const Array(String)

返り値

入力文字列から得られたトークンの配列を返します。Array

デフォルトのトークナイザー

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

Ngramトークナイザー

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