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

Expression régulière dans la clause PostgreSQL LIKE

Comme @a_horse l'a commenté, vous devrez utiliser l'opérateur d'expression régulière ~ utiliser des expressions entre parenthèses.
Mais il y a plus. Je suggère :

SELECT *
FROM   tbl
WHERE  value ~ '^00[^0]'

^ ... correspond au début de la chaîne (votre expression d'origine peut correspondre à tout poste).
[^0] ... une expression entre parenthèses (classe de caractères) correspondant à any caractère qui n'est pas 0 .

Ou mieux , encore :

SELECT *
FROM   tbl
WHERE  value LIKE '00%'       -- starting with '00'
AND    value NOT LIKE '000%'  -- third character is not '0'

Pourquoi? LIKE n'est pas aussi puissant, mais généralement plus rapide que les expressions régulières. Il est probablement beaucoup plus rapide de réduire l'ensemble des candidats avec un LIKE bon marché expression.

Généralement, vous utiliserez NOT LIKE '__0' , mais puisque nous avons déjà établi LIKE '00%' dans l'autre prédicat, nous pouvons utiliser le modèle plus étroit (moins cher) NOT LIKE '000' .

Postgres peut utiliser un simple index btree pour les expressions ancrées à gauche value LIKE '00%' (important pour les grandes tables), alors que cela pourrait ne pas fonctionner pour une expression régulière plus complexe. La dernière version de Postgres peut utiliser des index pour des expressions régulières simples, donc il pourrait travailler pour cet exemple. Détails :

  • Différence entre LIKE et ~ dans Postgres