はじめに
文字列データから特定パターンに該当するデータを検索したい場合があります。本記事では正規表現を使用して上記のデータを検索する関数「REGEXP_LIKE」をご紹介します。
構文
REGEXP_LIKE( string, pattern[, modifiers ] )
パラメータ | 説明 |
---|---|
string | 検索対象の文字列(項目)を指定します。 VARCHAR型またはLONG VARCHAR型の項目を指定できます。 |
pattern | stringに対して検索する正規表現を含む文字列を指定します。 正規表現の構文は、Perl 5の正規表現の構文と互換性があります。 |
modifiers | [オプション] 1つ以上の単一文字フラグを指定します。 正規表現が文字列の一致を見つける方法を変更します。 'b' 文字列をUTF-8文字ではなくバイナリオクテットとして扱います。 'c' 大文字と小文字を区別するように一致を強制します(デフォルト)。 'i' 大文字と小文字を区別しないように一致を強制します。 'm' 文字列を複数行として一致するように扱います。 この修飾子を使用すると、行頭(^)および行末($)の正規表現演算子は、文字列内の改行(\n)に一致します。 m修飾子がない場合、行頭および行末演算子は文字列の先頭と末尾のみに一致します。 'n' 単一文字の正規表現演算子(.) が改行(\n) と一致することを許可します。 n修飾子がない場合、(.)演算子は改行を除くすべての文字に一致します。 'x' 正規表現にコメントを追加します。 x修飾子を使用すると、正規表現のエスケープされていないスペース文字とコメントがすべて無視されます。 コメントはハッシュ(#)文字で始まり、改行(\n)で終わります。 文字列で一致させたい正規表現のすべてのスペースは、バックスラッシュ(\)文字でエスケープする必要があります。 |
実行例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
/* テーブルの全データを確認 */ dbadmin=> SELECT * FROM test ORDER BY 1; col1 | col2 ------+--------------------------------------------------- 1 | アシストの本社は市ヶ谷です。 2 | アシストは沖縄に拠点あります。 3 | アシストは北海道に拠点あります。 4 | 市ヶ谷が本社です。 5 | 沖縄に拠点があります。 6 | 北海道に拠点があります。 7 | 株式会社アシストは1972年3月に設立しました。 8 | 株式会社アシスト北海道は2013年1月に設立しました。 9 | 株式会社のれんは2014年1月に設立しました。 (9 rows) /* 冒頭が「沖縄」または「北海道」で始まるデータを検索 */ dbadmin=> SELECT * FROM test WHERE REGEXP_LIKE(col2, '^[沖縄|北海道]'); col1 | col2 ------+-------------------------- 5 | 沖縄に拠点があります。 6 | 北海道に拠点があります。 (2 rows) /* 2000~2999年の文字を含むデータを検索 */ dbadmin=> SELECT * FROM test WHERE REGEXP_LIKE(col2, '[2-9][0-9]{3}年'); col1 | col2 ------+--------------------------------------------------- 8 | 株式会社アシスト北海道は2013年1月に設立しました。 9 | 株式会社のれんは2014年1月に設立しました。 (2 rows) |
参考情報
REGEXP_LIKE関数のマニュアルhttps://www.vertica.com/docs/9.2.x/HTML/Content/Authoring/SQLReferenceManual/Functions/RegularExpressions/REGEXP_LIKE.htm