MySQL fournit le standard SQL des recherches de modèles,
basé sur une extension des expressions régulières
similaires à celles utilisées par les utilitaires Unix comme
vi
, grep
, et
sed
.
La recherche de modèles SQL vous permet d'utiliser le
caractère ‘_
’ pour trouver
n'importe quel caractère et le caractère
‘%
’ pour trouver un nombre
arbitraire de caractères (y compris aucun caractère). Dans
MySQL, la recherche de modèles est sensible à la casse par
défaut. Quelques exemples vous sont présentés ici.
Notez que vous n'utilisez ni =
ni
<>
lorsque vous utilisez la recherche
de modèles SQL ; utilisez les opérateurs de comparaison
LIKE
ou NOT LIKE
à la
place.
Pour trouver les noms commen¸ant par la lettre
‘b
’ :
mysql> SELECT * FROM animal WHERE nom LIKE "b%";
+--------+--------+--------+------+------------+------------+
| nom | maitre | espece | sexe | naissance | mort |
+--------+--------+--------+------+------------+------------+
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
| Bowser | Diane | chien | m | 1989-08-31 | 1995-07-29 |
+--------+--------+--------+------+------------+------------+
Pour trouver les noms finissant par
‘fy
’ :
mysql> SELECT * FROM animal WHERE nom LIKE "%fy";
+--------+--------+---------+------+------------+-------+
| nom | maitre | espece | sexe | naissance | mort |
+--------+--------+---------+------+------------+-------+
| Fluffy | Harold | chat | f | 1993-02-04 | NULL |
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
+--------+--------+---------+------+------------+-------+
Pour trouver les noms contenant le caractères
‘w
’ :
mysql> SELECT * FROM animal WHERE nom LIKE "%w%";
+----------+--------+---------+------+------------+------------+
| nom | maitre | espece | sexe | naissance | mort |
+----------+--------+---------+------+------------+------------+
| Claws | Gwen | chat | m | 1994-03-17 | NULL |
| Bowser | Diane | chien | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | oiseaux | NULL | 1997-12-09 | NULL |
+----------+--------+---------+------+------------+------------+
Pour trouver les noms contenant exactement 5 caractères,
utilisez le caractère de recherche
‘_
’ :
mysql> SELECT * FROM animal WHERE nom LIKE "_____";
+-------+--------+--------+------+------------+------+
| nom | maitre | espece | sexe | naissance | mort |
+-------+--------+--------+------+------------+------+
| Claws | Gwen | chat | m | 1994-03-17 | NULL |
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
+-------+--------+--------+------+------------+------+
L'autre type de recherche de modèles fourni par MySQL utilise
les expressions régulières étendues. Lorsque vous testez
une recherche avec ce type de modèle, utilisez les
opérateurs REGEXP
et NOT
REGEXP
(ou RLIKE
et NOT
RLIKE
qui sont des synonymes).
Quelques caractéristiques des expressions régulières étendues sont :
Le caractère ‘.
’ trouve
n'importe quel caractère.
Une classe de caractères
‘[...]
’ trouve n'importe
quel caractère contenu entre les crochets. Par exemple,
la classe de caractères
‘[abc]
’ trouve le
caractère ‘a
’,
‘b
’, ou
‘c
’. Pour définir un
intervalle de caractères, utilisez un trait d'union. La
classe de caractères
‘[a-z]
’ trouvera n'importe
quel caractère minuscule, tout comme la classe
‘[0-9]
’ trouvera n'importe
quel nombre.
Le caractère ‘*
’ trouvera
aucune ou plus d'instances du caractère qui le précède.
Par exemple, ‘x*
’ trouvera
n'importe quel nombre de fois le caractère
‘x
’,
‘[0-9]*
’ trouvera n'importe
quel nombre et ‘.*
’
trouvera n'importe quel nombre de fois n'importe quel
caractère.
Le modèle est trouvé s'il se produit n'importe où dans la valeur testée. (Les modèles SQL ne sont trouvés que s'ils sont présents en valeur entière.)
Pour ancrer un modèle de sorte qu'il soit trouvé au
début ou à la fin de valeur testée, utilisez
‘^
’ au début ou bien
‘$
’ à la fin du modèle.
Pour démontrer comment les expressions régulières
fonctionnent, les requêtes LIKE
vues
précédemment ont été réécrites pour utiliser
REGEXP
.
Pour trouver les noms qui commencent par la lettre
‘b
’, utilisez
‘^
’ pour trouver le début du
nom :
mysql> SELECT * FROM animal WHERE nom REGEXP "^b";
+--------+--------+--------+------+------------+------------+
| nom | maitre | espece | sexe | naissance | mort |
+--------+--------+--------+------+------------+------------+
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
| Bowser | Diane | chien | m | 1989-08-31 | 1995-07-29 |
+--------+--------+--------+------+------------+------------+
Avant la version 3.23.4 de MySQL, REGEXP
était sensible à la casse, et la requête précédente ne
retournait aucune ligne. Pour trouver la lettre
‘b
’ minuscule ou majuscule,
utilisez cette requête à la place :
mysql> SELECT * FROM animal WHERE nom REGEXP "^[bB]";
Depuis MySQL 3.23.4, pour forcer REGEXP
à
être sensible à la casse, utilisez le mot-clé
BINARY
pour faire de la chaîne, une
chaîne binaire. Cette requête trouvera uniquement la lettre
minuscule ‘b
’ au début du
nom :
mysql> SELECT * FROM animal WHERE nom REGEXP BINARY "^b";
Pour trouver les noms finissant par
‘fy
’, utilisez
‘$
’ pour trouver la fin du
nom :
mysql> SELECT * FROM animal WHERE nom REGEXP "fy$";
+---------+--------+--------+-------+------------+------+
| nom | maitre | espece | sexe | naissance | mort |
+---------+--------+--------+-------+------------+------+
| Fluffy | Harold | chat | f | 1993-02-04 | NULL |
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
+---------+--------+--------+-------+------------+------+
Pour trouver les noms contenant la lettre
‘w
’ minuscule ou majuscule,
utilisez la requête suivante :
mysql> SELECT * FROM animal WHERE nom REGEXP "w";
+----------+--------+---------+------+------------+------------+
| nom | maitre | espece | sexe | naissance | mort |
+----------+--------+---------+------+------------+------------+
| Claws | Gwen | chat | m | 1994-03-17 | NULL |
| Bowser | Diane | chien | m | 1989-08-31 | 1995-07-29 |
| Whistler | Gwen | oiseaux | NULL | 1997-12-09 | NULL |
+----------+--------+---------+------+------------+------------+
Parce qu'une expression régulière est trouvée si le modèle se trouve n'importe où dans la valeur, il n'est pas nécessaire dans la requête précédente de mettre un joker de chaque côté du modèle recherché pour trouver la valeur entière comme cela aurait été le cas en utilisant les modèles de recherche SQL.
Pour trouver les noms contenant exactement 5 caractères,
utilisez ‘^
’ et
‘$
’ pour trouver le début et
la fin du nom, et 5 instances de
‘.
’ au milieu :
mysql> SELECT * FROM animal WHERE nom REGEXP "^.....$";
+-------+--------+--------+------+------------+------+
| nom | maitre | espece | sexe | naissance | mort |
+-------+--------+--------+------+------------+------+
| Claws | Gwen | chat | m | 1994-03-17 | NULL |
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
+-------+--------+--------+------+------------+------+
Vous pouvez aussi écrire la requête suivante en utilisant
l'opérateur ‘{n}
’
``répéter-n
-fois'' :
mysql> SELECT * FROM animal WHERE nom REGEXP "^.{5}$";
+-------+--------+--------+------+------------+------+
| nom | maitre | espece | sexe | naissance | mort |
+-------+--------+--------+------+------------+------+
| Claws | Gwen | chat | m | 1994-03-17 | NULL |
| Buffy | Harold | chien | f | 1989-05-13 | NULL |
+-------+--------+--------+------+------------+------+
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.