14 KiB
slug | sidebar_position | sidebar_label |
---|---|---|
/ja/sql-reference/functions/splitting-merging-functions | 165 | 文字列の分割 |
文字列を分割するための関数
splitByChar
特定の文字で文字列を分割してサブ文字列を生成します。1文字からなる定数文字列 separator
を使用します。選択されたサブ文字列の配列を返します。文字列の先頭や末尾に区切り文字がある場合や、連続して区切り文字が存在する場合は、空のサブ文字列も選択されることがあります。
構文
splitByChar(separator, s[, max_substrings]))
引数
separator
— 1文字からなる区切り文字。String。s
— 分割する文字列。String。max_substrings
— 任意のInt64
。デフォルトは0です。max_substrings
> 0 の場合、返される配列には最大でmax_substrings
のサブ文字列が含まれます。そうでない場合、可能な限り多くのサブ文字列が返されます。
返される値
空のサブ文字列が選択される状況:
- 文字列の先頭または末尾に区切り文字がある場合;
- 連続して複数の区切り文字がある場合;
- 元の文字列
s
が空である場合。
:::note
ClickHouse v22.11 以降、パラメータ max_substrings
の動作が変更されました。それ以前のバージョンでは、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']
を返しました
ClickHouseのv22.11以前のような動作を得るには、splitby_max_substrings_includes_remaining_string を設定してください。
SELECT splitByChar('=', 'a=b=c=d', 2) SETTINGS splitby_max_substrings_includes_remaining_string = 1 -- ['a', 'b=c=d']
:::
例
SELECT splitByChar(',', '1,2,3,abcde');
結果:
┌─splitByChar(',', '1,2,3,abcde')─┐
│ ['1','2','3','abcde'] │
└─────────────────────────────────┘
splitByString
文字列を特定の文字列で分割します。複数文字からなる定数文字列 separator
を区切り文字として使用します。文字列 separator
が空の場合、文字列 s
を単一文字の配列に分割します。
構文
splitByString(separator, s[, max_substrings]))
引数
separator
— 区切り文字。String。s
— 分割する文字列。String。max_substrings
— 任意のInt64
。デフォルトは0です。max_substrings
> 0 の場合、返されるサブ文字列は最大でmax_substrings
になり、それ以外は可能な限り多くのサブ文字列が返されます。
返される値
空のサブ文字列が選択される状況:
- 非空の区切り文字が文字列の先頭や末尾にある場合;
- 非空の区切り文字が連続している場合;
- 元の文字列
s
が空で区切り文字が空ではない場合。
:::note
splitby_max_substrings_includes_remaining_string を設定すると、max_substrings
> 0 の場合に残りの文字列が結果配列の最後の要素に含まれるかどうかを制御します(デフォルト: 0)。
:::
例
SELECT splitByString(', ', '1, 2 3, 4,5, abcde');
結果:
┌─splitByString(', ', '1, 2 3, 4,5, abcde')─┐
│ ['1','2 3','4,5','abcde'] │
└───────────────────────────────────────────┘
SELECT splitByString('', 'abcde');
結果:
┌─splitByString('', 'abcde')─┐
│ ['a','b','c','d','e'] │
└────────────────────────────┘
splitByRegexp
正規表現で指定したパターンを区切りとして文字列を分割します。正規表現文字列 regexp
を区切り文字として使用します。regexp
が空の場合、文字列 s
を1文字ずつの配列に分割します。この正規表現と一致する部分が見つからない場合、文字列 s
は分割されません。
構文
splitByRegexp(regexp, s[, max_substrings]))
引数
regexp
— 正規表現。定数。String または FixedString。s
— 分割する文字列。String。max_substrings
— 任意のInt64
。デフォルトは0です。max_substrings
> 0 の場合、返されるサブ文字列は最大でmax_substrings
になります。それ以外は、可能な限り多くのサブ文字列が返されます。
返される値
空のサブ文字列が選択される状況:
- 非空の正規表現の一致が文字列の先頭または末尾にある場合;
- 非空の正規表現の一致が連続している場合;
- 元の文字列
s
が空で正規表現が空ではない場合。
:::note
splitby_max_substrings_includes_remaining_string を設定すると、max_substrings
> 0 の場合に残りの文字列が結果配列の最後の要素に含まれるかどうかを制御します(デフォルト: 0)。
:::
例
SELECT splitByRegexp('\\d+', 'a12bc23de345f');
結果:
┌─splitByRegexp('\\d+', 'a12bc23de345f')─┐
│ ['a','bc','de','f'] │
└────────────────────────────────────────┘
SELECT splitByRegexp('', 'abcde');
結果:
┌─splitByRegexp('', 'abcde')─┐
│ ['a','b','c','d','e'] │
└────────────────────────────┘
splitByWhitespace
空白文字で文字列を分割します。選択されたサブ文字列の配列を返します。
構文
splitByWhitespace(s[, max_substrings]))
引数
s
— 分割する文字列。String。max_substrings
— 任意のInt64
。デフォルトは0です。max_substrings
> 0 の場合、返されるサブ文字列は最大でmax_substrings
になります。それ以外は、可能な限り多くのサブ文字列が返されます。
返される値
:::note
splitby_max_substrings_includes_remaining_string を設定すると、max_substrings
> 0 の場合に残りの文字列が結果配列の最後の要素に含まれるかどうかを制御します(デフォルト: 0)。
:::
例
SELECT splitByWhitespace(' 1! a, b. ');
結果:
┌─splitByWhitespace(' 1! a, b. ')─┐
│ ['1!','a,','b.'] │
└─────────────────────────────────────┘
splitByNonAlpha
空白または句読点で文字列を分割します。選択されたサブ文字列の配列を返します。
構文
splitByNonAlpha(s[, max_substrings]))
引数
s
— 分割する文字列。String。max_substrings
— 任意のInt64
。デフォルトは0です。max_substrings
> 0 の場合、返されるサブ文字列は最大でmax_substrings
になります。それ以外は、可能な限り多くのサブ文字列が返されます。
返される値
:::note
splitby_max_substrings_includes_remaining_string を設定すると、max_substrings
> 0 の場合に残りの文字列が結果配列の最後の要素に含まれるかどうかを制御します(デフォルト: 0)。
:::
例
SELECT splitByNonAlpha(' 1! a, b. ');
結果:
┌─splitByNonAlpha(' 1! a, b. ')─┐
│ ['1','a','b'] │
└───────────────────────────────────┘
arrayStringConcat
配列内の値を区切り文字で結合して文字列を返します。separator
はオプションのパラメータであり、デフォルトでは空文字列として設定されています。
構文
arrayStringConcat(arr\[, separator\])
例
SELECT arrayStringConcat(['12/05/2021', '12:50:00'], ' ') AS DateString;
結果:
┌─DateString──────────┐
│ 12/05/2021 12:50:00 │
└─────────────────────┘
alphaTokens
a-z および A-Z の範囲の連続したバイト列のサブ文字列を選択します。サブ文字列の配列を返します。
構文
alphaTokens(s[, max_substrings]))
エイリアス: splitByAlpha
引数
s
— 分割する文字列。String。max_substrings
— 任意のInt64
。デフォルトは0です。max_substrings
> 0 の場合、返されるサブ文字列は最大でmax_substrings
になります。それ以外は、可能な限り多くのサブ文字列が返されます。
返される値
:::note
splitby_max_substrings_includes_remaining_string を設定すると、max_substrings
> 0 の場合に残りの文字列が結果配列の最後の要素に含まれるかどうかを制御します(デフォルト: 0)。
:::
例
SELECT alphaTokens('abca1abc');
結果:
┌─alphaTokens('abca1abc')─┐
│ ['abca','abc'] │
└─────────────────────────┘
extractAllGroups
正規表現で一致する非重複サブ文字列からすべてのグループを抽出します。
構文
extractAllGroups(text, regexp)
引数
text
— String または FixedString。regexp
— 正規表現。定数。String または FixedString。
返される値
- 少なくとも1つの一致するグループが見つかった場合、
Array(Array(String))
をグループID(1からN、regexp
内のキャプチャグループの数N)でクラスタリングして返します。一致するグループがない場合、空の配列を返します。Array 。
例
SELECT extractAllGroups('abc=123, 8="hkl"', '("[^"]+"|\\w+)=("[^"]+"|\\w+)');
結果:
┌─extractAllGroups('abc=123, 8="hkl"', '("[^"]+"|\\w+)=("[^"]+"|\\w+)')─┐
│ [['abc','123'],['8','"hkl"']] │
└───────────────────────────────────────────────────────────────────────┘
ngrams
UTF-8文字列を ngramsize
記号のn-gramに分割します。
構文
ngrams(string, ngramsize)
引数
string
— 文字列。String または FixedString。ngramsize
— n-gramのサイズ。UInt。
返される値
例
SELECT ngrams('ClickHouse', 3);
結果:
┌─ngrams('ClickHouse', 3)───────────────────────────┐
│ ['Cli','lic','ick','ckH','kHo','Hou','ous','use'] │
└───────────────────────────────────────────────────┘
tokens
ASCIIの非英数字文字をセパレータとして使用して文字列をトークンに分割します。
引数
input_string
— Stringデータ型オブジェクトで表された任意のバイトセット。
返される値
- 入力文字列からのトークン配列。Array。
例
SELECT tokens('test1,;\\ test2,;\\ test3,;\\ test4') AS tokens;
結果:
┌─tokens────────────────────────────┐
│ ['test1','test2','test3','test4'] │
└───────────────────────────────────┘