ClickHouse/docs/ja/sql_reference/functions/string_replace_functions.md
2020-04-04 12:15:31 +03:00

4.6 KiB
Raw Blame History

machine_translated machine_translated_rev toc_priority toc_title
true d734a8e46d 42 文字列で置換する場合

文字列の検索と置換のための関数

replaceOne(干し草の山,パターン,交換)

が存在する場合は、その最初のオカレンスを置き換えます。 pattern の部分文字列 haystackreplacement サブストリング。 以後, patternreplacement 定数である必要があります。

replaceAll(干し草の山、パターン、交換)、交換(干し草の山、パターン、交換)

すべての出現を置き換えます。 pattern の部分文字列 haystackreplacement サブストリング。

replaceRegexpOne(haystack,pattern,replacement)

を使用して交換 pattern 正規表現。 Re2正規表現。 最初のオカレンスのみを置き換えます(存在する場合)。 パターンは次のように指定できます replacement. このパタ \0-\9. 置換 \0 正規表現全体を含みます。 置換 \1-\9 サブパターンに対応しますnumbers.To を使用 \ テンプレート内の文字をエスケープします \. また、文字列リテラルには余分なエスケープが必要です。

例1. 日付をアメリカ形式に変換する:

SELECT DISTINCT
    EventDate,
    replaceRegexpOne(toString(EventDate), '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res
FROM test.hits
LIMIT 7
FORMAT TabSeparated
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

例2. 文字列を十回コピーする:

SELECT replaceRegexpOne('Hello, World!', '.*', '\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0') AS res
┌─res────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World!Hello, World! │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

replaceRegexpAll(干し草の山,パターン,置換)

これは同じことをしますが、すべての出現を置き換えます。 例えば:

SELECT replaceRegexpAll('Hello, World!', '.', '\\0\\0') AS res
┌─res────────────────────────┐
│ HHeelllloo,,  WWoorrlldd!! │
└────────────────────────────┘

例外として、正規表現が空の部分文字列で処理された場合、置換は複数回行われません。 例えば:

SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res
┌─res─────────────────┐
│ here: Hello, World! │
└─────────────────────┘

regexpQuoteMeta(s)

この関数は、文字列内のいくつかの定義済み文字の前に円記号を追加します。 定義済み文字: 0, \, |, (, ), ^, $, ., [, ']', ?, '*,+,{,:,-'. この実装はre2::re2::quotemetaとは若干異なります。 ゼロバイトを\0の代わりに\00としてエスケープし、必要な文字だけをエスケープします。 詳細については、リンク: RE2

元の記事