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