MySQL
Espressioni regolari
Ricerca…
introduzione
Un'espressione regolare è un modo efficace per specificare un modello per una ricerca complessa.
REGEXP / RLIKE
L' REGEXP
(o il suo sinonimo, RLIKE
) consente la corrispondenza del modello in base alle espressioni regolari.
Considera la seguente tabella dei 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 |
+-------------+-------------+-------------+--------------+----------+
Modello ^
Seleziona tutti i dipendenti con FIRST_NAME
iniziano con N.
domanda
SELECT * FROM employees WHERE FIRST_NAME REGEXP '^N'
-- Pattern start with----------------------------^
Modello $ **
Seleziona tutti i dipendenti il cui PHONE_NUMBER
termina con 4569 .
domanda
SELECT * FROM employees WHERE PHONE_NUMBER REGEXP '4569$'
-- Pattern end with----------------------------------^
NON REGEXP
Seleziona tutti i dipendenti il cui FIRST_NAME
non inizia con N.
domanda
SELECT * FROM employees WHERE FIRST_NAME NOT REGEXP '^N'
-- Pattern does not start with---------------^
Regex Contenere
Seleziona tutti i dipendenti il cui LAST_NAME
contiene e la cui FIRST_NAME
contiene a
.
domanda
SELECT * FROM employees WHERE FIRST_NAME REGEXP 'a' AND LAST_NAME REGEXP 'in'
-- No ^ or $, pattern can be anywhere -------------------------------------^
Qualsiasi personaggio tra []
Seleziona tutti i dipendenti il cui FIRST_NAME
inizia con A o B o C.
domanda
SELECT * FROM employees WHERE FIRST_NAME REGEXP '^[ABC]'
-------------------------------------------------^^---^
Modello o |
Seleziona tutti i dipendenti il cui FIRST_NAME
inizia con A o B o C e termina con r , e o i .
domanda
SELECT * FROM employees WHERE FIRST_NAME REGEXP '^[ABC]|[rei]$'
-- ----------------------------------------------^^---^^^---^^
Conteggio delle corrispondenze di espressioni regolari
Considera la seguente query:
SELECT FIRST_NAME, FIRST_NAME REGEXP '^N' as matching FROM employees
FIRST_NAME REGEXP '^N'
è 1 o 0 a seconda del fatto che FIRST_NAME
corrisponda a ^N
Per visualizzarlo meglio:
SELECT
FIRST_NAME,
IF(FIRST_NAME REGEXP '^N', 'matches ^N', 'does not match ^N') as matching
FROM employees
Infine, conta il numero totale di righe corrispondenti e non corrispondenti con:
SELECT
IF(FIRST_NAME REGEXP '^N', 'matches ^N', 'does not match ^N') as matching,
COUNT(*)
FROM employees
GROUP BY matching