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