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----------------------------------^
НЕ REGEXP
Выберите всех сотрудников, FIRST_NAME
которых не начинается с N.
запрос
SELECT * FROM employees WHERE FIRST_NAME NOT REGEXP '^N'
-- Pattern does not start with---------------^
Regex Contain
Выбрать всех сотрудников , чьи 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'
равно 1 или 0 в зависимости от того, что FIRST_NAME
соответствует ^N
Чтобы визуализировать это лучше:
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