ClickHouse/docs/ja/sql-reference/functions/splitting-merging-functions.md

399 lines
14 KiB
Markdown
Raw Normal View History

2024-11-18 02:58:58 +00:00
---
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))` をグループID1から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'] │
└───────────────────────────────────┘
```