正規表現とLIKEの比較
Db2 LUW(Linux,Unix and Windows版)ではV11.1以降、正規表現をSQL内で使うことができるようになっており、Oracle互換機能の一環として、Oracleと互換性のある正規表現スカラー関数が使用できます。
正規表現とLIKEを比較してみます。
LIKE | 正規表現サポート | |
---|---|---|
使用方法 | 「述部」 主にWHERE句で特定のパターンを持つストリングを探索するための演算 WHERE column1 LIKE '資料%'; (備考1) |
「関数」 SELECTの列リストやWHERE句での条件判断式で使用できる WHERE REGEXP_LIKE ( column1, '^資料.' ) = TRUE; (備考2) |
対応パターン | •「%」任意のゼロ文字以上の文字列 •「_」任意の一文字 |
•一般的な正規表現パターンをサポート •マッチ文字列パターンと置換文字列パターン |
対応機能 | •探索のみ | •探索結果(マッチの有無) •マッチした回数 •マッチした箇所 •マッチ箇所を置換パターンで置換した文字列 •マッチ箇所の文字部分列 |
備考1: 以下のように、LIKE述部はSELECTの列リストでの利用も可能です。
SELECT strvalue , strvalue LIKE '%c_' AS "LIKEマッチ結果"
FROM (
VALUES
'ABCアabca',
'ABCいabcb',
'ABCxabcc',
'abcアABCa',
'abcいABCb',
'abcxABCc'
) AS dummytable (strvalue);
STRVALUE LIKEマッチ結果
--------- -----------------
ABCアabca true
ABCいabcb true
ABCxabcc true
abcアABCa false
abcいABCb false
abcxABCc false
備考2: 正規表現関数(REGEXP_LIKE)のSELECT 列リストでの使用例
SELECT strvalue
, REGEXP_LIKE (strvalue, '.*c.$', 'c') AS "大文字小文字区別あり"
, REGEXP_LIKE (strvalue, '.*c.$', 'i') AS "大文字小文字区別なし"
FROM (
VALUES
'ABCアabca',
'ABCいabcb',
'ABCxabcc',
'abcアABCa',
'abcいABCb',
'abcxABCc'
) AS dummytable (strvalue);
STRVALUE 大文字小文字区別あり 大文字小文字区別なし
--------- ------------------ ------------------
ABCアabca true true
ABCいabcb true true
ABCxabcc true true
abcアABCa false true
abcいABCb false true
abcxABCc false true