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