- カテゴリ:
[ NOT ] RLIKE¶
文字列が指定されたパターンに一致するかしないかを比較します。両方の入力はテキスト式でなければなりません。
RLIKE は [ NOT ] LIKE 関数に似ていますが、 SQL LIKE パターン構文ではなく POSIX 拡張正規表現を使用します。LIKEよりも複雑な一致条件をサポートします。
Tip
検索最適化サービスを使用すると、この関数を呼び出すクエリのパフォーマンスを向上させることができます。詳細については、 検索最適化サービス をご参照ください。
- エイリアス:
[ NOT ] REGEXP (2番目の構文)、 REGEXP_LIKE (1番目の構文)
文字列関数(正規表現) もご参照ください。
構文¶
-- 1st syntax
RLIKE( <subject> , <pattern> [ , <parameters> ] )
-- 2nd syntax
<subject> [ NOT ] RLIKE <pattern>
引数¶
必須:
subject
一致を検索する文字列です。
pattern
一致するパターンです。
パターンの指定に関するガイドラインについては、 文字列関数(正規表現) をご参照ください。
オプション:
parameters
一致の検索に使用されるパラメーターを指定する1つ以上の文字の文字列です。サポートされている値:
パラメーター
説明
c
大文字と小文字を区別する一致
i
大文字と小文字を区別しない一致
m
複数行モード
e
部分一致を抽出
s
POSIX wildcard character
.
matches\n
デフォルト:
c
詳細については、 正規表現のパラメーターの指定 をご参照ください。
戻り値¶
BOOLEAN または NULL を返します。
RLIKE を指定した場合、一致するときの値は TRUE。それ以外の場合は、 FALSE を返します。
NOT RLIKE を指定した場合、一致しない時の値は TRUE。それ以外の場合は、 FALSE を返します。
RLIKE か NOT RLIKE のどちらかを指定した場合、引数の中に NULL があれば NULL を返します。
使用上の注意¶
関数は暗黙的に両端でパターンを固定します(例えば、
''
は自動的に'^$'
になり、'ABC'
は自動的に'^ABC$'
になります)。ABC で始まる文字列と一致する場合、パターンは'ABC.*'
になります。バックスラッシュ文字(
\
)はエスケープ文字です。詳細については、 一重引用符で囲まれた文字列定数での正規表現の指定 をご参照ください。使用上の注意については、正規表現関数の 一般的な使用上の注意 をご参照ください。
照合の詳細¶
Arguments with collation specifications are currently not supported.
例¶
次のコマンドを実行して、このトピックの例のデータを設定します。
CREATE OR REPLACE TABLE rlike_ex(city VARCHAR(20));
INSERT INTO rlike_ex VALUES ('Sacramento'), ('San Francisco'), ('San Jose'), (null);
最初の構文を使用する例¶
次の例では、ワイルドカードを使用して大文字と小文字を区別しないパターン一致を実行します。
SELECT * FROM rlike_ex WHERE RLIKE(city, 'san.*', 'i');
+---------------+
| CITY |
|---------------|
| San Francisco |
| San Jose |
+---------------+
SELECT * FROM rlike_ex WHERE NOT RLIKE(city, 'san.*', 'i');
+------------+
| CITY |
|------------|
| Sacramento |
+------------+
次の例では、文字列が電話番号とメールアドレスの形式と一致するかどうかを判断します。これらの例では、正規表現でバックスラッシュがエスケープされないように、正規表現は ドル引用符で囲まれた文字列 で指定されています。
SELECT RLIKE('800-456-7891',
$$[2-9]\d{2}-\d{3}-\d{4}$$) AS matches_phone_number;
+----------------------+
| MATCHES_PHONE_NUMBER |
|----------------------|
| True |
+----------------------+
SELECT RLIKE('jsmith@email.com',
$$\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$$) AS matches_email_address;
+-----------------------+
| MATCHES_EMAIL_ADDRESS |
|-----------------------|
| True |
+-----------------------+
次の例は同じ一致を実行しますが、 一重引用符で囲まれた文字列定数 を使用して正規表現を指定します。
この例では一重引用符で囲まれた文字列定数を使用しているため、 各バックスラッシュは別のバックスラッシュでエスケープする必要があります。
SELECT RLIKE('800-456-7891',
'[2-9]\\d{2}-\\d{3}-\\d{4}') AS matches_phone_number;
+----------------------+
| MATCHES_PHONE_NUMBER |
|----------------------|
| True |
+----------------------+
SELECT RLIKE('jsmith@email.com',
'\\w+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}') AS matches_email_address;
+-----------------------+
| MATCHES_EMAIL_ADDRESS |
|-----------------------|
| True |
+-----------------------+
あるいは、ステートメントを書き直して、バックスラッシュ文字に依存するシーケンスを回避します。
SELECT RLIKE('800-456-7891',
'[2-9][0-9]{2}-[0-9]{3}-[0-9]{4}') AS matches_phone_number;
+----------------------+
| MATCHES_PHONE_NUMBER |
|----------------------|
| True |
+----------------------+
SELECT RLIKE('jsmith@email.com',
'[a-zA-Z_]+@[a-zA-Z_]+?\\.[a-zA-Z]{2,3}') AS matches_email_address;
+-----------------------+
| MATCHES_EMAIL_ADDRESS |
|-----------------------|
| True |
+-----------------------+
2番目の構文を使用する例¶
次の例では、ワイルドカードを使用して大文字と小文字を区別しないパターンマッチングを実行します。
SELECT * FROM rlike_ex WHERE city RLIKE 'San.* [fF].*';
+---------------+
| CITY |
|---------------|
| San Francisco |
+---------------+
追加の例¶
正規表現のその他の例については、 [ NOT ] REGEXP をご参照ください。