AnalyticDB for PostgreSQLは、PostgreSQLパターンマッチングと互換性があります。 このトピックでは、AnalyticDB for PostgreSQLでサポートされているパターンマッチング演算子、正規表現、および関数について説明し、演算子、正規表現、および関数の使用方法の例を示します。
PostgreSQLは、パターンマッチングを実行するために、LIKE演算子、SIMILAR to演算子、およびPOSIX (Portable Operating System Interface) 正規表現のアプローチを提供します。 PostgreSQLパターンマッチングの実行方法については、「パターンマッチング」をご参照ください。
LIKE演算子
LIKEは、SELECTステートメント内のパターンマッチングに使用できるSQLキーワードです。 LIKEパターンマッチングとは、ワイルドカード文字を使用して文字列の全体または一部を照合することを指します。
構文
SELECT column1, column2, ...
FROM table
WHERE column LIKE pattern;パラメーター:
column: パターンに対して値を一致させる列の名前。
pattern: マッチングに使用されるパターン。ワイルドカード文字を含めることができます。
次のワイルドカード文字がサポートされています。
%: ゼロ文字または複数文字。
_: 任意の単一の文字。
例
次の表に、LIKE演算子の使用方法の例を示します。
例 | SQL文 | 説明 |
例 1 | SELECT * FROMテーブルWHERE列LIKE 'abc %' | 指定した列の値がabcで始まるすべての行をクエリします。 |
例 2 | SELECT * FROMテーブルWHEREカラムLIKE '% xyz %' | 指定した列の値がxyzを含むすべての行をクエリします。 |
例 3 | SELECT * FROMテーブルWHERE列LIKE '_bc_' | 指定した列の値が4文字で、2文字目と3文字目にbとcを含むすべての行をクエリします。 |
例 4 | SELECT * FROMテーブルWHERE列LIKE 'a_b_c_' | 指定した列の値の長さが6文字で、1文字目、3文字目、5文字目としてa、b、cを含むすべての行を照会します。 |
例 5 | SELECT * テーブルからWHERE列LIKE 'a % b' | 指定した列の値がaで始まり、bで終わるすべての行をクエリします。 |
オペレータに同じ
SIMILAR TOは、SELECTステートメント内で正規表現を使用してパターンマッチングを実行できるPostgreSQLキーワードです。
構文
SELECT column1, column2, ...
FROM table
WHERE column SIMILAR TO pattern;パラメーター:
column: パターンに対して値を一致させる列の名前。
pattern: マッチングに使用される正規表現パターン。
例
SIMILAR TO演算子は、.,*,+,?,|,(、および). 次のステートメントを実行して、数字を含むすべての行を照会します。
SELECT * FROM table WHERE column SIMILAR TO '[0-9]+';パラメーター:
[0-9]: 0から9までの任意の数字に一致します。
+: 前の文字を1回または複数回繰り返すことを指定します。
POSIX正規表現
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: パターンマッチングを制御するために使用される正規表現フラグ。 このパラメーターはオプションです。
例
次のステートメントを実行して、Hello、worldのすべての大文字を置き換えます。 対応する小文字の文字列。
サンプル文
SELECT regexp_replace('Hello, world!', '[A-Z]', lower('\1'), 'g');サンプル結果
hello, world!regexp_match()
regexp_match() 関数は、正規表現に一致する文字列の一部を抽出するために使用できるPostgreSQLの文字列操作関数です。 この関数は配列を返します。 一致が見つかった場合、この関数は、パターン内の各キャプチャグループに対応する部分文字列を含む配列を返します。 それ以外の場合、この関数は空の文字列を返します。
構文
regexp_match(expression, pattern [, flags]);パラメーター:
式: パターンと照合する文字列。
pattern: マッチングに使用される正規表現パターン。
flags: パターンの解釈方法を制御する文字列フラグ。 このパラメーターはオプションです。
例
この例では、次のデータを含むnameという名前の列が使用されます。
name |
ジョン・スミス |
ジェーン・ドウ |
次のステートメントを実行して、name列に格納されているフルネームのリストからファーストネームを抽出します。 このステートメントでは、regexp_match() 関数が呼び出されます。
サンプル文
SELECT regexp_match(name, '^(.*?)[ ](.*?)$') AS first_name
FROM names;サンプル結果
first_name |
{ジョン} |
{ジェーン} |