PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Expressão regular na cláusula PostgreSQL LIKE


Como @a_horse comentou, você teria que usar o operador de expressão regular ~ para usar expressões de colchetes.
Mas há mais. Eu sugiro:
SELECT *
FROM   tbl
WHERE  value ~ '^00[^0]'

^ ... corresponde ao início da string (sua expressão original pode corresponder a qualquer posição).
[^0] ... uma expressão de colchetes (classe de caractere) correspondendo a qualquer caractere que não é 0 .

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

Por quê? LIKE não é tão poderoso, mas normalmente mais rápido que expressões regulares. Provavelmente é substancialmente mais rápido restringir o conjunto de candidatos com um LIKE barato expressão.

Geralmente, você usaria NOT LIKE '__0' , mas como já estabelecemos LIKE '00%' no outro predicado, podemos usar o padrão mais estreito (mais barato) NOT LIKE '000' .

O Postgres pode usar um índice simples btree para as expressões ancoradas à esquerda value LIKE '00%' (importante para tabelas grandes), enquanto isso pode não funcionar para uma expressão regular mais complexa. A versão mais recente do Postgres pode usar índices para expressões regulares simples, então pode trabalhar para este exemplo. Detalhes:
  • Diferença entre LIKE e ~ no Postgres