Expressions régulières dans la clause LIKE de PostgreSQL : utilisation de l'opérateur LIKE vs. ~
Dans PostgreSQL, vous pouvez utiliser des expressions régulières pour rechercher des modèles spécifiques au sein des données. Cependant, si vous rencontrez des problèmes avec vos expressions, il est essentiel d'en comprendre les nuances et les limites.
Le défi : le troisième caractère ne correspond pas
Considérez la requête suivante :
SELECT * FROM table WHERE value LIKE '00[1-9]%' -- (third character should not be 0)
Malgré son intention d'exclure toute valeur avec un troisième caractère '0', cette requête ne correspondra pas à ce critère. Au lieu de cela, il correspond à n'importe quelle valeur commençant par « 00 ».
La solution : utiliser l'opérateur ~
Pour utiliser efficacement les expressions entre crochets, nous devons utiliser l'opérateur d'expression régulière ~:
SELECT * FROM tbl WHERE value ~ '^00[^0]'
^ ... désigne le début de la chaîne, garantissant que le motif correspond uniquement au début.
1 ... représente une classe de caractères qui correspond à tout sauf « 0 ».
Une approche optimisée
Pour des performances optimales, envisagez de diviser la requête en deux expressions LIKE :
SELECT * FROM tbl WHERE value LIKE '00%' -- starting with '00' AND value NOT LIKE '000%' -- third character is not '0'
LIKE est moins puissant que les expressions régulières mais généralement plus rapides. En limitant les candidats avec l'expression économique LIKE, nous améliorons la vitesse globale des requêtes.
De plus, il est crucial d'utiliser des expressions ancrées à gauche comme la valeur LIKE '00%' car elles peuvent exploiter les index dans PostgreSQL. Ceci est particulièrement avantageux pour les grandes tables, tandis que l'expression régulière plus complexe peut ne pas prendre en charge l'indexation.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!