Mysql
 sql >> Base de données >  >> RDS >> Mysql

Sélection d'une partie d'un champ avec une regex

Cette réponse est obsolète. MySql a un meilleur support des regex.

Non, malheureusement, MySQL n'a aucun moyen d'appliquer une expression régulière au contenu d'une colonne dans une clause SELECT, seulement une clause WHERE.

Mais vous pouvez utiliser des fonctions de manipulation de chaîne ordinaires (non régulières) pour ce faire. Si la colonne contenant votre chaîne de paramètres séparés par une esperluette est nommée url , vous pouvez obtenir le numéro d'identification avec cette expression de chaîne fine, qui trouve votre numéro d'identification.

  CAST(RIGHT(url, LENGTH(url) - 3 - LOCATE('&id=', url)) AS SIGNED INTEGER)

Donc, si vous voulez une liste de id valeurs de l'url colonnes de table1 , vous pouvez utiliser ce SELECT requête.

SELECT CAST(RIGHT(url, LENGTH(url) - 3 - 
                       LOCATE('&id=', url)) AS SIGNED INTEGER) AS id
  FROM table1
 WHERE url REGEXP '&id=[0-9]+'

Comme vous pouvez le voir, cela utilise la fonction de recherche d'expression régulière pour localiser les lignes appropriées.

Il n'y a rien de rapide à ce sujet. La correspondance d'expression régulière ne peut pas exploiter un index MySQL. Si vous avez le choix de charger votre table avec la colonne id pré-extraite, vous ferez bien mieux de chercher lorsque votre table grossira.