Expressions régulières dans la clause LIKE de PostgreSQL
Dans PostgreSQL, la clause LIKE est couramment utilisée pour la correspondance de modèles dans les comparaisons de chaînes. Cependant, des expressions régulières peuvent également être utilisées pour améliorer la flexibilité de la clause LIKE. Examinons un scénario courant dans lequel l'utilisation d'expressions régulières peut s'avérer bénéfique.
Le problème :
Considérez l'extrait de requête suivant :
SELECT * FROM table WHERE value LIKE '00[1-9]%' -- (third character should not be 0)
Cette requête vise à récupérer les lignes dont la colonne de valeur commence par « 00 » suivi d'un chiffre entre 1 et 9 (mais pas 0), suivi d'un nombre quelconque. de personnages. Cependant, la requête ne parvient pas à correspondre à la chaîne prévue « 0090D0DF143A ».
La solution :
Pour résoudre ce problème, l'opérateur d'expression régulière ~ doit être utilisé à la place de l'opérateur LIKE. De plus, l'expression régulière elle-même peut être modifiée pour obtenir le comportement souhaité :
SELECT * FROM tbl WHERE value ~ '^00[^0]'
Dans cette expression :
Bonne pratique :
Alternativement, la requête suivante utilisant plusieurs expressions LIKE est recommandée pour des raisons de clarté et d'optimisation des performances :
SELECT * FROM tbl WHERE value LIKE '00%' -- starting with '00' AND value NOT LIKE '000%' -- third character is not '0'
L'utilisation des clauses LIKE et NOT LIKE garantit l'efficacité en limitant l'ensemble des candidats à l'aide de l'expression LIKE la moins complexe avant d'appliquer l'expression régulière la plus coûteuse. négation.
Notez que les index peuvent être utilisés pour accélérer les requêtes impliquant des expressions régulières simples comme celle de cet exemple. Pour des informations plus détaillées, reportez-vous à la documentation PostgreSQL sur la différence entre LIKE et ~.
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!