すべてのプロダクト
Search
ドキュメントセンター

AnalyticDB:パターンマッチング

最終更新日:Mar 29, 2026

AnalyticDB for PostgreSQL は、PostgreSQL から継承された以下の 3 種類のパターンマッチング機能をサポートしています:`LIKE` 演算子、`SIMILAR TO` 演算子、および POSIX 正規表現です。PostgreSQL の完全な仕様については、「パターンマッチング」をご参照ください。

LIKE 演算子

`LIKE` 演算子は、ワイルドカード文字を使用して文字列とパターンを照合します。

構文

SELECT column1, column2, ...
FROM table
WHERE column LIKE pattern;

パラメーター

パラメーター説明
columnパターンと照合する値を持つ列
pattern照合対象のパターン。ワイルドカード文字を含めることができます

ワイルドカード文字

ワイルドカード対応する内容
%ゼロ個以上の任意の文字
_任意の 1 文字

パターン説明
column LIKE 'abc%'abc
column LIKE '%xyz%'xyz
column LIKE '_bc_'4 文字の値で、2 文字目と 3 文字目がそれぞれ b および c であるもの
column LIKE 'a_b_c_'6 文字の値で、1 文字目、3 文字目、5 文字目がそれぞれ abc であるもの
column LIKE 'a%b'a で始まり、b

SIMILAR TO 演算子

`SIMILAR TO` 演算子は、正規表現のメタ文字を `LIKE` に拡張したものです。この演算子では、パターンが文字列全体と一致する必要があります。

構文

SELECT column1, column2, ...
FROM table
WHERE column SIMILAR TO pattern;

パラメーター

パラメーター説明
columnパターンと照合する値を持つ列
pattern照合対象の正規表現パターン

サポートされるメタ文字

`SIMILAR TO` は、標準の正規表現メタ文字(.*+?|())をすべてサポートしています。

-- 列の値に 1 個以上の数字が含まれる行を照合
SELECT * FROM table WHERE column SIMILAR TO '[0-9]+';
  • [0-9] — 0 ~ 9 のいずれかの数字に一致

  • + — 直前の要素が 1 回以上出現することを要求

POSIX 正規表現

POSIX 正規表現は POSIX 標準に準拠しており、完全な正規表現構文をサポートしています。regexp_replace() 関数および regexp_match() 関数と併用することで、部分文字列の変換や抽出が可能です。

regexp_replace()

regexp_replace() 関数は、POSIX 正規表現に一致する部分文字列を新しいテキストに置き換えます。

構文

regexp_replace(string text, pattern text, replacement text [, flags text])

パラメーター

パラメーター説明
string照合対象の元の文字列
pattern正規表現パターン
replacement各一致箇所に代入する文字列
flags照合動作を制御するオプションのフラグ(例:グローバル置換のための g

すべての大文字を対応する小文字に置き換えます:

サンプルクエリ

SELECT regexp_replace('Hello, world!', '[A-Z]', lower('\1'), 'g');

返却結果

hello, world!

regexp_match()

regexp_match() は、正規表現に一致する部分文字列を抽出します。この関数は、パターン内の各キャプチャグループに対応する部分文字列の配列を返します。一致するものがない場合は、空の文字列を返します。

構文

regexp_match(expression text, pattern text [, flags text])

パラメーター

パラメーター説明
expression照合対象の文字列
pattern正規表現パターン
flagsパターンの解釈方法を制御するオプションのフラグ

フルネームを格納する name 列から名(ファーストネーム)を抽出します:

入力データ:

name
John Smith
山田花子

サンプルクエリ

SELECT regexp_match(name, '^(.*?)[ ](.*?)$') AS first_name
FROM names;

結果

{太郎}
{花子}

パターン ^(.*?)[ ](.*?)$ は、最初の空白文字で分割されます。最初のキャプチャグループ (.*?) は名(ファーストネーム)に一致し、regexp_match() 関数はそれを配列の最初の要素として返します。