MySQL
正規表現
サーチ…
前書き
正規表現は、複雑な検索のパターンを指定する強力な方法です。
REGEXP / RLIKE
REGEXP
(またはそのシノニム、 RLIKE
)演算子は、正規表現に基づいたパターンマッチングを可能にします。
次のemployee
テーブルを考えてみましょう。
+-------------+-------------+-------------+--------------+----------+
| EMPLOYEE_ID | FIRST_NAME | LAST_NAME | PHONE_NUMBER | SALARY |
+-------------+-------------+-------------+--------------+----------+
| 100 | Steven | King | 515.123.4567 | 24000.00 |
| 101 | Neena | Kochhar | 515.123.4568 | 17000.00 |
| 102 | Lex | De Haan | 515.123.4569 | 17000.00 |
| 103 | Alexander | Hunold | 590.423.4567 | 9000.00 |
| 104 | Bruce | Ernst | 590.423.4568 | 6000.00 |
| 105 | David | Austin | 590.423.4569 | 4800.00 |
| 106 | Valli | Pataballa | 590.423.4560 | 4800.00 |
| 107 | Diana | Lorentz | 590.423.5567 | 4200.00 |
| 108 | Nancy | Greenberg | 515.124.4569 | 12000.00 |
| 109 | Daniel | Faviet | 515.124.4169 | 9000.00 |
| 110 | John | Chen | 515.124.4269 | 8200.00 |
+-------------+-------------+-------------+--------------+----------+
パターン^
FIRST_NAME
がNで始まるすべての従業員を選択します。
クエリ
SELECT * FROM employees WHERE FIRST_NAME REGEXP '^N'
-- Pattern start with----------------------------^
パターン$ **
PHONE_NUMBER
が4569で終わるすべての従業員を選択します。
クエリ
SELECT * FROM employees WHERE PHONE_NUMBER REGEXP '4569$'
-- Pattern end with----------------------------------^
NOT REGEXP
FIRST_NAME
が NでFIRST_NAME
ない従業員をすべて選択します。
クエリ
SELECT * FROM employees WHERE FIRST_NAME NOT REGEXP '^N'
-- Pattern does not start with---------------^
正規表現が含まれています
LAST_NAME
が含まれ 、 FIRST_NAME
はが含まれてa
すべての従業員を選択します。
クエリ
SELECT * FROM employees WHERE FIRST_NAME REGEXP 'a' AND LAST_NAME REGEXP 'in'
-- No ^ or $, pattern can be anywhere -------------------------------------^
[]との間の任意の文字
FIRST_NAME
がAまたはBまたはCで始まるすべての従業員を選択します。
クエリ
SELECT * FROM employees WHERE FIRST_NAME REGEXP '^[ABC]'
-------------------------------------------------^^---^
パターンまたは|
FIRST_NAME
がAまたはBまたはCで始まり、 r 、 e 、またはiで終わるすべての従業員を選択します。
クエリ
SELECT * FROM employees WHERE FIRST_NAME REGEXP '^[ABC]|[rei]$'
-- ----------------------------------------------^^---^^^---^^
正規表現の一致を数える
以下のクエリを考えてみましょう。
SELECT FIRST_NAME, FIRST_NAME REGEXP '^N' as matching FROM employees
FIRST_NAME REGEXP '^N'
は、 FIRST_NAME
^N
一致するという事実に応じて1または0です。
それをよりよく視覚化するには:
SELECT
FIRST_NAME,
IF(FIRST_NAME REGEXP '^N', 'matches ^N', 'does not match ^N') as matching
FROM employees
最後に、一致する行と一致しない行の合計数を次のようにカウントします。
SELECT
IF(FIRST_NAME REGEXP '^N', 'matches ^N', 'does not match ^N') as matching,
COUNT(*)
FROM employees
GROUP BY matching
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow