Retour à la liste

Utiliser les expressions régulières (REGEX)

Créé : 03.09.2012, 17:18:08  -  Modifié : 18.11.2017, 20:20:54

Peu utilisé car gourmand en ressources, l’utilisation des expressions régulières en mysql se révèle parfois indispensable.
Imaginons le cas suivant :
Vous avez une table stockant des mails envoyés à des clients. Afin d’économiser de la place sur votre serveur vous avez choisi d’insérer une seule ligne par envoi de mail en séparant les ID des clients à qui le mail est parti dans un seul champ (ce n’est peut être pas très clair, mais ça le deviendra avec l’exemple). Pour l’exemple le séparateur d’ID sera le tiret. Je sais que ce n’est pas la meilleur méthode, mais nous ne sommes pas là pour parler performances (sinon on ne parlerai pas de MySQL ;) ).
Pour cet exemple, nous allons donc extraire les mails envoyés au client ayant l’ID 23 entre le 02 aout 2010 et le 15 aout 2010 et les trier par date d’envoi. Les dates sont au format DATETIME et les IDS des clients séparés par des tirets sont stockés dans le champs ID.

SELECT * FROM `table` WHERE `date_mail` BETWEEN '2010-08-02%' 
AND '2010-08-05%' 
AND ID REGEXP '(^|-)23(-|$)' 
ORDER BY `date_mail`;

Petite explication :
Dans le cas ou le séparateur est un tiret ‘-’, on a 3 possibilité pour trouver le chiffre 23.
Au début de la chaine (d’ou le ^)
En fin de chaine (d’ou le ‘$’)
ou entre 2 tirets (d’ou les ‘-’)
Le pipe ‘|’ signifie ou (ca c’est pour ceux qui ne le savaient pas).

Il existe des séquences types :

[[:alnum:]] : [A-Za-z0-9] – caractères alphanumériques

[[:alpha:]] : [A-Za-z] – caractères alphabétiques

[[:digit:]] : [0-9] – caractères numériques

[[:blank:]] : espaces ou tabulation

[[:xdigit:]] : [0-9a-fA-F] – caractères hexadécimaux

[[:graph:]] : caractères affichables et imprimables

[[:lower:]] : [a-z] – caractères minuscules

[[:upper:]] : [A-Z] – caractères majuscules

[[:punct:]] : caractères de ponctuation

[[:space:]] : tout type d'espace

[[:cntrl:]] :  caractères d'échappement

[[:print:]] : caractères imprimables sauf ceux de contrôle


Rendu :0.1354 | Mémoire :2.88MB

Accueil | Informations | Top