mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-19 04:42:37 +00:00
334 lines
11 KiB
Markdown
334 lines
11 KiB
Markdown
|
---
|
|||
|
slug: /ja/sql-reference/functions/string-replace-functions
|
|||
|
sidebar_position: 150
|
|||
|
sidebar_label: 文字列の置換関数
|
|||
|
---
|
|||
|
|
|||
|
# 文字列の置換関数
|
|||
|
|
|||
|
[一般的な文字列関数](string-functions.md)および[文字列の検索関数](string-search-functions.md)は別々に説明されています。
|
|||
|
|
|||
|
## overlay
|
|||
|
|
|||
|
1から始まるインデックス`offset`で、文字列`input`の一部を別の文字列`replace`で置換します。
|
|||
|
|
|||
|
**構文**
|
|||
|
|
|||
|
```sql
|
|||
|
overlay(s, replace, offset[, length])
|
|||
|
```
|
|||
|
|
|||
|
**パラメータ**
|
|||
|
|
|||
|
- `s`: 文字列型 [String](../data-types/string.md)。
|
|||
|
- `replace`: 文字列型 [String](../data-types/string.md)。
|
|||
|
- `offset`: 整数型 [Int](../data-types/int-uint.md) (1-based)。`offset` が負の場合、それは文字列 `s` の末尾から数えます。
|
|||
|
- `length`: オプション。整数型 [Int](../data-types/int-uint.md)。`length` は、入力文字列 `s` 内で置換される部分の長さを指定します。`length` が指定されていない場合、`s` から削除されるバイト数は `replace` の長さと同じです。指定されている場合は、 `length` バイトが削除されます。
|
|||
|
|
|||
|
**返される値**
|
|||
|
|
|||
|
- [String](../data-types/string.md) データ型の値。
|
|||
|
|
|||
|
**例**
|
|||
|
|
|||
|
```sql
|
|||
|
SELECT overlay('My father is from Mexico.', 'mother', 4) AS res;
|
|||
|
```
|
|||
|
|
|||
|
結果:
|
|||
|
|
|||
|
```text
|
|||
|
┌─res──────────────────────┐
|
|||
|
│ My mother is from Mexico.│
|
|||
|
└──────────────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
```sql
|
|||
|
SELECT overlay('My father is from Mexico.', 'dad', 4, 6) AS res;
|
|||
|
```
|
|||
|
|
|||
|
結果:
|
|||
|
|
|||
|
```text
|
|||
|
┌─res───────────────────┐
|
|||
|
│ My dad is from Mexico.│
|
|||
|
└───────────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
## overlayUTF8
|
|||
|
|
|||
|
1から始まるインデックス`offset`で、文字列`input`の一部を別の文字列`replace`で置換します。
|
|||
|
|
|||
|
文字列が有効なUTF-8でエンコードされたテキストを含むことを前提としています。この前提が破られた場合、例外は投げられず、結果は未定義です。
|
|||
|
|
|||
|
**構文**
|
|||
|
|
|||
|
```sql
|
|||
|
overlayUTF8(s, replace, offset[, length])
|
|||
|
```
|
|||
|
|
|||
|
**パラメータ**
|
|||
|
|
|||
|
- `s`: 文字列型 [String](../data-types/string.md)。
|
|||
|
- `replace`: 文字列型 [String](../data-types/string.md)。
|
|||
|
- `offset`: 整数型 [Int](../data-types/int-uint.md) (1-based)。`offset` が負の場合、それは入力文字列 `s` の末尾から数えます。
|
|||
|
- `length`: オプション。整数型 [Int](../data-types/int-uint.md)。`length` は、入力文字列 `s` 内で置換される部分の長さを指定します。`length` が指定されていない場合、`s` から削除される文字数は `replace` の長さと同じです。指定されている場合は、 `length` 文字が削除されます。
|
|||
|
|
|||
|
**返される値**
|
|||
|
|
|||
|
- [String](../data-types/string.md) データ型の値。
|
|||
|
|
|||
|
**例**
|
|||
|
|
|||
|
```sql
|
|||
|
SELECT overlay('Mein Vater ist aus Österreich.', 'der Türkei', 20) AS res;
|
|||
|
```
|
|||
|
|
|||
|
結果:
|
|||
|
|
|||
|
```text
|
|||
|
┌─res───────────────────────────┐
|
|||
|
│ Mein Vater ist aus der Türkei.│
|
|||
|
└───────────────────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
## replaceOne
|
|||
|
|
|||
|
`haystack` 中の最初のサブストリング `pattern` を `replacement` 文字列で置換します。
|
|||
|
|
|||
|
**構文**
|
|||
|
|
|||
|
```sql
|
|||
|
replaceOne(haystack, pattern, replacement)
|
|||
|
```
|
|||
|
|
|||
|
## replaceAll
|
|||
|
|
|||
|
`haystack` 中のすべてのサブストリング `pattern` を `replacement` 文字列で置換します。
|
|||
|
|
|||
|
**構文**
|
|||
|
|
|||
|
```sql
|
|||
|
replaceAll(haystack, pattern, replacement)
|
|||
|
```
|
|||
|
|
|||
|
別名: `replace`.
|
|||
|
|
|||
|
## replaceRegexpOne
|
|||
|
|
|||
|
正規表現 `pattern` ( [re2 syntax](https://github.com/google/re2/wiki/Syntax) で) に一致する最初のサブストリングを `haystack` から `replacement` 文字列で置換します。
|
|||
|
|
|||
|
`replacement` には置換 `\0-\9` を含めることができます。
|
|||
|
置換 `\1-\9` は1から9までのキャプチャグループ (サブマッチ) に対応し、置換 `\0` は全体のマッチに対応します。
|
|||
|
|
|||
|
`pattern` または `replacement` 文字列に逐語的な `\` 文字を使用するには、 `\` を使用してエスケープします。
|
|||
|
文字列リテラルは追加のエスケープが必要であることにも注意してください。
|
|||
|
|
|||
|
**構文**
|
|||
|
|
|||
|
```sql
|
|||
|
replaceRegexpOne(haystack, pattern, replacement)
|
|||
|
```
|
|||
|
|
|||
|
**例**
|
|||
|
|
|||
|
ISO形式の日付をアメリカの形式に変換する:
|
|||
|
|
|||
|
``` sql
|
|||
|
SELECT DISTINCT
|
|||
|
EventDate,
|
|||
|
replaceRegexpOne(toString(EventDate), '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res
|
|||
|
FROM test.hits
|
|||
|
LIMIT 7
|
|||
|
FORMAT TabSeparated
|
|||
|
```
|
|||
|
|
|||
|
結果:
|
|||
|
|
|||
|
``` text
|
|||
|
2014-03-17 03/17/2014
|
|||
|
2014-03-18 03/18/2014
|
|||
|
2014-03-19 03/19/2014
|
|||
|
2014-03-20 03/20/2014
|
|||
|
2014-03-21 03/21/2014
|
|||
|
2014-03-22 03/22/2014
|
|||
|
2014-03-23 03/23/2014
|
|||
|
```
|
|||
|
|
|||
|
文字列を10回コピーする:
|
|||
|
|
|||
|
``` sql
|
|||
|
SELECT replaceRegexpOne('Hello, World!', '.*', '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0') AS res
|
|||
|
```
|
|||
|
|
|||
|
結果:
|
|||
|
|
|||
|
``` text
|
|||
|
┌─res────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
|
|||
|
│ Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World! │
|
|||
|
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
## replaceRegexpAll
|
|||
|
|
|||
|
`replaceRegexpOne` と似ていますが、パターンのすべての出現を置換します。
|
|||
|
|
|||
|
別名: `REGEXP_REPLACE`.
|
|||
|
|
|||
|
**例**
|
|||
|
|
|||
|
``` sql
|
|||
|
SELECT replaceRegexpAll('Hello, World!', '.', '\\0\\0') AS res
|
|||
|
```
|
|||
|
|
|||
|
結果:
|
|||
|
|
|||
|
``` text
|
|||
|
┌─res────────────────────────┐
|
|||
|
│ HHeelllloo,, WWoorrlldd!! │
|
|||
|
└────────────────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
例外として、正規表現が空のサブストリングで機能した場合、置換は一度だけ行われ、次のようになります:
|
|||
|
|
|||
|
``` sql
|
|||
|
SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res
|
|||
|
```
|
|||
|
|
|||
|
結果:
|
|||
|
|
|||
|
``` text
|
|||
|
┌─res─────────────────┐
|
|||
|
│ here: Hello, World! │
|
|||
|
└─────────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
## regexpQuoteMeta
|
|||
|
|
|||
|
正規表現で特別な意味を持つ次の文字の前にバックスラッシュを追加します: `\0`, `\\`, `|`, `(`, `)`, `^`, `$`, `.`, `[`, `]`, `?`, `*`, `+`, `{`, `:`, `-`.
|
|||
|
|
|||
|
この実装は re2::RE2::QuoteMeta とは若干異なります。ゼロバイトを `\x00` ではなく `\0` としてエスケープし、必要な文字のみエスケープします。
|
|||
|
詳細については、[RE2](https://github.com/google/re2/blob/master/re2/re2.cc#L473) を参照してください。
|
|||
|
|
|||
|
**構文**
|
|||
|
|
|||
|
```sql
|
|||
|
regexpQuoteMeta(s)
|
|||
|
```
|
|||
|
|
|||
|
## format
|
|||
|
|
|||
|
`pattern` 文字列を引数にリストされた値(文字列、整数など)でフォーマットします。Pythonのフォーマットに似ています。`pattern` 文字列には、中括弧 `{}` で囲まれた置換フィールドを含めることができます。中括弧に含まれていないものは、リテラルテキストと見なされ、出力にそのままコピーされます。リテラル中括弧は二重中括弧 `{{ '{{' }}` および `{{ '}}' }}` でエスケープできます。フィールド名は0から始まる数字または空白にでき、空の場合は単調に増加する番号が暗黙的に与えられます。
|
|||
|
|
|||
|
**構文**
|
|||
|
|
|||
|
```sql
|
|||
|
format(pattern, s0, s1, ...)
|
|||
|
```
|
|||
|
|
|||
|
**例**
|
|||
|
|
|||
|
``` sql
|
|||
|
SELECT format('{1} {0} {1}', 'World', 'Hello')
|
|||
|
```
|
|||
|
|
|||
|
```result
|
|||
|
┌─format('{1} {0} {1}', 'World', 'Hello')─┐
|
|||
|
│ Hello World Hello │
|
|||
|
└─────────────────────────────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
暗黙の番号を使用した場合:
|
|||
|
|
|||
|
``` sql
|
|||
|
SELECT format('{} {}', 'Hello', 'World')
|
|||
|
```
|
|||
|
|
|||
|
```result
|
|||
|
┌─format('{} {}', 'Hello', 'World')─┐
|
|||
|
│ Hello World │
|
|||
|
└───────────────────────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
## translate
|
|||
|
|
|||
|
文字列 `s` 内の文字を、`from` および `to` 文字列で定義された一対一の文字マッピングを使用して置換します。`from` および `to` は同じサイズの定数ASCII文字列でなければなりません。元の文字列の非ASCII文字は変更されません。
|
|||
|
|
|||
|
**構文**
|
|||
|
|
|||
|
```sql
|
|||
|
translate(s, from, to)
|
|||
|
```
|
|||
|
|
|||
|
**例**
|
|||
|
|
|||
|
``` sql
|
|||
|
SELECT translate('Hello, World!', 'delor', 'DELOR') AS res
|
|||
|
```
|
|||
|
|
|||
|
結果:
|
|||
|
|
|||
|
``` text
|
|||
|
┌─res───────────┐
|
|||
|
│ HELLO, WORLD! │
|
|||
|
└───────────────┘
|
|||
|
```
|
|||
|
|
|||
|
## translateUTF8
|
|||
|
|
|||
|
[translate](#translate) と同様ですが、`s`, `from`, `to` がUTF-8でエンコードされた文字列であることを前提としています。
|
|||
|
|
|||
|
**構文**
|
|||
|
|
|||
|
``` sql
|
|||
|
translateUTF8(s, from, to)
|
|||
|
```
|
|||
|
|
|||
|
**パラメータ**
|
|||
|
|
|||
|
- `s`: 文字列型 [String](../data-types/string.md)。
|
|||
|
- `from`: 文字列型 [String](../data-types/string.md)。
|
|||
|
- `to`: 文字列型 [String](../data-types/string.md)。
|
|||
|
|
|||
|
**返される値**
|
|||
|
|
|||
|
- [String](../data-types/string.md) データ型の値。
|
|||
|
|
|||
|
**例**
|
|||
|
|
|||
|
クエリ:
|
|||
|
|
|||
|
``` sql
|
|||
|
SELECT translateUTF8('Münchener Straße', 'üß', 'us') AS res;
|
|||
|
```
|
|||
|
|
|||
|
``` response
|
|||
|
┌─res──────────────┐
|
|||
|
│ Munchener Strase │
|
|||
|
└──────────────────┘
|
|||
|
```
|
|||
|
|
|||
|
## printf
|
|||
|
|
|||
|
`printf` 関数は、与えられた文字列を引数にリストされた値(文字列、整数、浮動小数点数など)でフォーマットし、C++ の printf 関数に似ています。フォーマット文字列には `%` 文字から始まるフォーマット指定子を含めることができます。`%` およびその後のフォーマット指定子に含まれていないものはリテラルテキストと見なされ、出力にそのままコピーされます。リテラル `%` 文字は `%%` でエスケープできます。
|
|||
|
|
|||
|
**構文**
|
|||
|
|
|||
|
``` sql
|
|||
|
printf(format, arg1, arg2, ...)
|
|||
|
```
|
|||
|
|
|||
|
**例**
|
|||
|
|
|||
|
クエリ:
|
|||
|
|
|||
|
``` sql
|
|||
|
select printf('%%%s %s %d', 'Hello', 'World', 2024);
|
|||
|
```
|
|||
|
|
|||
|
``` response
|
|||
|
┌─printf('%%%s %s %d', 'Hello', 'World', 2024)─┐
|
|||
|
│ %Hello World 2024 │
|
|||
|
└──────────────────────────────────────────────┘
|
|||
|
```
|