一般的な文字列関数 と 文字列検索関数 については、別途説明しています。
format
導入バージョン: v20.1.0
Python のフォーマットと同様に、引数で指定した値 (文字列、整数など) を使って pattern 文字列をフォーマットします。
パターン文字列には、中かっこ {} で囲まれた置換フィールドを含めることができます。
中かっこで囲まれていない部分はすべてリテラルテキストと見なされ、そのまま出力にコピーされます。
中かっこそのものを文字として扱うには、{{ および }} のように 2 つ重ねてエスケープします。
フィールド名には数値 (0 から始まる) か空欄を指定できます (空欄の場合は、暗黙的に連番が割り当てられます) 。
構文
format(pattern, s0[, s1, ...])引数
戻り値
フォーマットされた文字列を返します。String
例
番号付きプレースホルダー
SELECT format('{1} {0} {1}', 'World', 'Hello')┌─format('{1} {0} {1}', 'World', 'Hello')─┐
│ Hello World Hello │
└─────────────────────────────────────────┘暗黙的な番号付け
SELECT format('{} {}', 'Hello', 'World')┌─format('{} {}', 'Hello', 'World')─┐
│ Hello World │
└───────────────────────────────────┘overlay
導入バージョン: v24.9.0
文字列 input の一部を、1 から始まる位置 offset から別の文字列 replace に置き換えます。
構文
overlay(s, replace, offset[, length])引数
s— 入力文字列。Stringreplace— 置換文字列。const Stringoffset— 整数型Int(1始まり) 。offsetが負の場合は、文字列sの末尾から数えます。Intlength— 任意。整数型Int。lengthは、入力文字列s内で置換する部分文字列の長さを指定します。lengthを指定しない場合、sから削除されるバイト数はreplaceの長さと同じになります。指定した場合は、lengthバイトが削除されます。Int
戻り値
置換後の文字列を返します。String
例
基本的な置換
SELECT overlay('My father is from Mexico.', 'mother', 4) AS res;┌─res───────────────────────┐
│ My mother is from Mexico. │
└───────────────────────────┘長さを指定する置換
SELECT overlay('My father is from Mexico.', 'dad', 4, 6) AS res;┌─res────────────────────┐
│ My dad is from Mexico. │
└────────────────────────┘overlayUTF8
導入バージョン: v24.9.0
1 始まりの位置 offset から、文字列 s の一部を別の文字列 replace に置き換えます。
文字列には、有効な UTF-8 でエンコードされたテキストが含まれていることを前提としています。
この前提が満たされない場合でも、例外は送出されず、結果は未定義です。
構文
overlayUTF8(s, replace, offset[, length])引数
s— 入力文字列。Stringreplace— 置換文字列。const Stringoffset— 整数型Int(1始まり) 。offsetが負の場合は、入力文字列sの末尾から数えます。(U)Int*length— 任意。置換する入力文字列s内の部分文字列の長さを指定します。lengthを指定しない場合、sから削除される文字数はreplaceの長さと同じです。指定した場合は、length文字を削除します。(U)Int*
戻り値
置換後の文字列を返します。 String
例
UTF-8 の置換
SELECT overlayUTF8('Mein Vater ist aus Österreich.', 'der Türkei', 20) AS res;┌─res────────────────────────────┐
│ Mein Vater ist aus der Türkei. │
└────────────────────────────────┘printf
導入バージョン: v24.8.0
printf 関数は、引数で指定した値 (文字列、整数、浮動小数点数など) を使って、C++ の printf 関数と同様に文字列をフォーマットします。
フォーマット文字列には、% 文字で始まるフォーマット指定子を含めることができます。
% と、それに続くフォーマット指定子に含まれないものは、すべてリテラルテキストと見なされ、そのまま出力にコピーされます。
リテラルの % 文字は %% でエスケープできます。
フォーマット文字列には、定数またはカラム式を指定できるため、行ごとに異なるフォーマットパターンを使用できます。
構文
printf(format[, sub1, sub2, ...])引数
戻り値
フォーマットされた文字列を返します。String
例
C++スタイルのフォーマット
SELECT printf('%%%s %s %d', 'Hello', 'World', 2024);┌─printf('%%%s %s %d', 'Hello', 'World', 2024)─┐
│ %Hello World 2024 │
└──────────────────────────────────────────────┘regexpQuoteMeta
導入バージョン: v20.1.0
正規表現で特別な意味を持つ次の文字の前に、バックスラッシュを追加します: \0, \\, |, (, ), ^, $, ., [, ], ?, *, +, {, :, -。
この実装は、re2::RE2::QuoteMeta とは若干異なります。
ゼロバイトは \x00 ではなく \0 としてエスケープされ、必要な文字のみがエスケープされます。
構文
regexpQuoteMeta(s)引数
s— 正規表現用にエスケープする文字を含む入力文字列。String
戻り値
正規表現の特殊文字がエスケープされた文字列を返します。String
例
正規表現の特殊文字をエスケープする
SELECT regexpQuoteMeta('Hello. [World]? (Yes)*') AS res┌─res───────────────────────────┐
│ Hello\. \[World\]\? \(Yes\)\* │
└───────────────────────────────┘replaceAll
導入バージョン: v1.1.0
haystack 内にある部分文字列 pattern を、replacement 文字列にすべて置き換えます。
構文
replaceAll(haystack, pattern, replacement)別名: replace
引数
haystack— 検索対象の文字列です。Stringpattern— 検索して置換する部分文字列です。const Stringreplacement—patternを置き換える文字列です。const String
戻り値
pattern のすべての出現箇所を置換した文字列を返します。String
例
すべての出現箇所を置換
SELECT replaceAll('Hello, Hello world', 'Hello', 'Hi') AS res;┌─res──────────┐
│ Hi, Hi world │
└──────────────┘replaceOne
導入バージョン: v1.1.0
haystack 内で最初に出現する部分文字列 pattern を、文字列 replacement に置き換えます。
構文
replaceOne(haystack, pattern, replacement)引数
haystack— 検索対象の入力文字列です。Stringpattern— 検索して置換する部分文字列です。const Stringreplacement—patternを置換する文字列です。const String
戻り値
pattern の最初の出現箇所を置換した文字列を返します。String
例
最初の出現箇所を置換
SELECT replaceOne('Hello, Hello world', 'Hello', 'Hi') AS res;┌─res─────────────┐
│ Hi, Hello world │
└─────────────────┘replaceRegexpAll
導入バージョン: v1.1.0
replaceRegexpOne と似ていますが、パターンに一致するすべての箇所を置き換えます。
ただし、正規表現が空の部分文字列にマッチする場合、置換は1回しか行われません。
構文
replaceRegexpAll(haystack, pattern, replacement)別名: REGEXP_REPLACE
引数
haystack— 検索対象の入力文字列です。Stringpattern— 検索する正規表現パターンです。const Stringreplacement— パターンの置換に使用する文字列です。置換指定を含めることができます。const String
戻り値
すべての正規表現一致が置換された文字列を返します。String
例
すべての文字を2倍にして置換する
SELECT replaceRegexpAll('Hello123', '.', '\\0\\0') AS res┌─res──────────────┐
│ HHeelllloo112233 │
└──────────────────┘空文字列の置換例
SELECT replaceRegexpAll('Hello, World!', '^', 'here: ') AS res┌─res─────────────────┐
│ here: Hello, World! │
└─────────────────────┘replaceRegexpOne
導入バージョン: v1.1.0
haystack 内で、正規表現 pattern (re2 構文) に一致する部分文字列の最初の出現箇所を replacement 文字列に置き換えます。
replacement には置換 \0-\9 を含めることができます。
置換 \1-\9 は第1〜第9のキャプチャグループ (部分一致) に対応し、置換 \0 は一致全体に対応します。
pattern または replacement 文字列内で \ 文字そのものを使用するには、\ でエスケープします。
また、文字列リテラルでは追加のエスケープが必要になる点にも注意してください。
構文
replaceRegexpOne(haystack, pattern, replacement)引数
haystack— 検索対象の入力文字列です。Stringpattern— 検索する正規表現パターンです。const Stringreplacement—patternに一致した部分を置き換える文字列です。置換指定 を含めることができます。const String
戻り値
最初に一致した正規表現パターンを置き換えた文字列を返します。String
例
ISO日付をアメリカ形式に変換する
SELECT replaceRegexpOne(d, '(\\d{4})-(\\d{2})-(\\d{2})', '\\2/\\3/\\1') AS res
FROM values('d String', '2014-03-17', '2014-03-18', '2014-03-19')┌─res────────┐
│ 03/17/2014 │
│ 03/18/2014 │
│ 03/19/2014 │
└────────────┘文字列を10回繰り返す
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! │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘translate
導入バージョン: v22.7.0
from および to 文字列で定義された 1 対 1 の文字対応に従って、文字列 s 内の文字を置換します。
from と to は定数の ASCII 文字列である必要があります。
from と to の長さが同じ場合、s 内の from の 1 文字目は to の 1 文字目に、from の 2 文字目は to の 2 文字目に、というように置換されます。
from に to より多くの文字が含まれている場合、to に対応する文字がない from 末尾の文字は、s からすべて削除されます。
s 内の非 ASCII 文字は、この関数では変更されません。
構文
translate(s, from, to)引数
s— 変換対象の入力文字列。Stringfrom— 置換する文字を含む定数 ASCII 文字列。const Stringto— 置換後の文字を含む定数 ASCII 文字列。const String
戻り値
文字変換が適用された文字列を返します。String
例
文字マッピング
SELECT translate('Hello, World!', 'delor', 'DELOR') AS res┌─res───────────┐
│ HELLO, WORLD! │
└───────────────┘長さが異なる場合
SELECT translate('clickhouse', 'clickhouse', 'CLICK') AS res┌─res───┐
│ CLICK │
└───────┘translateUTF8
導入バージョン: v22.7.0
translate と同様ですが、s、from、to は UTF-8 でエンコードされた文字列であることを前提としています。
構文
translateUTF8(s, from, to)引数
s— 変換対象の UTF-8 入力文字列。Stringfrom— 置換対象の文字を含む定数 UTF-8 文字列。const Stringto— 置換後の文字を含む定数 UTF-8 文字列。const String
戻り値
String データ型の値を返します。String
例
UTF-8 文字の変換
SELECT translateUTF8('Münchener Straße', 'üß', 'us') AS res;┌─res──────────────┐
│ Munchener Strase │
└──────────────────┘