ClickHouse/docs/ja/sql-reference/functions/string-replace-functions.md
2024-11-18 11:58:58 +09:00

334 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 │
└──────────────────────────────────────────────┘
```