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

文字列分割関数

注記

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

alphaTokens

導入: v1.1

a-z および A-Z の範囲に含まれるバイトのみから成る連続部分文字列を抽出し、それらを配列として返します。

構文

alphaTokens(s[, max_substrings])

エイリアス: splitByAlpha

引数

  • s — 分割する文字列。String
  • max_substrings — 省略可能。max_substrings > 0 の場合、返される部分文字列の数は max_substrings を超えません。0 以下の場合、この関数は可能な限り多くの部分文字列を返します。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 エンコードされた文字列を、長さ N の n-gram に分割します。

構文

ngrams(s, N)

引数

戻り値

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 以下の場合は、可能な限り多くの部分文字列を返します。デフォルト値は 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

指定した正規表現で文字列を分割し、部分文字列の配列を返します。 指定した正規表現が空文字列の場合、元の文字列は 1 文字ごとの配列に分割されます。 正規表現に 1 つもマッチしない場合、文字列は分割されません。

空の部分文字列が返される場合:

  • 非空の正規表現が文字列の先頭または末尾にマッチした場合
  • 非空の正規表現のマッチが連続して複数存在する場合
  • 正規表現が空でなく、元の文字列が空文字列である場合。
注記

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 を 1 文字ごとの配列に分割します。

次の場合、空の部分文字列が生成されることがあります:

  • 空ではないセパレーターが文字列の先頭または末尾に現れる場合
  • 空ではないセパレーターが連続して複数現れる場合
  • 元の文字列 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 を超えません。max_substrings <= 0 の場合は、可能な限り多くの部分文字列を返します。デフォルト値: 0Int64

返される値

s を分割して得られた部分文字列の配列を返します。Array(String)

使用例

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

tokens

導入バージョン: v21.11

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

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

構文

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

引数

  • value — 入力文字列。String または FixedString
  • tokenizer — 使用するトークナイザー。指定可能な値は splitByNonAlphangramssplitByStringarraysparseGrams。省略可能で、明示的に指定しない場合は splitByNonAlpha がデフォルト。const String
  • ngrams — 引数 tokenizerngrams の場合にのみ有効: n-gram の長さを指定するオプションのパラメータ。1 から 8 の間である必要があります。明示的に指定しない場合、デフォルトは 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']