Saltar al contenido

Expresión regular en la cláusula LIKE de PostgreSQL

Solución:

Como comentó @a_horse, tendrías que usar el operador de expresión regular ~ para usar expresiones de corchetes.
Pero hay más. Yo sugiero:

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

^ … coincidir al comienzo de la cadena (su expresión original podría coincidir en alguna posición).
[^0] … una expresión de corchete (clase de carácter) que coincide alguna personaje que no es 0.

O mejor, todavía:

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

¿Por qué? LIKE no es tan potente, pero normalmente más rápido que las expresiones regulares. Probablemente sea sustancialmente más rápido reducir el conjunto de candidatos con un LIKE expresión.

Generalmente, usarías NOT LIKE '__0', pero como ya establecemos LIKE '00%' en el otro predicado, podemos usar el patrón más estrecho (más barato) NOT LIKE '000'.

Postgres puede usar un btree simple índice para las expresiones ancladas a la izquierda value LIKE '00%' (importante para tablas grandes), aunque puede que no funcione para una expresión regular más compleja. La última versión de Postgres puede usar índices para expresiones regulares simples, por lo que podría trabajar para este ejemplo. Detalles:

  • Diferencia entre LIKE y ~ en Postgres

PostgreSQL LIKE el operador no es compatible [charlist], sin embargo SIMILAR TO lo hace.

cheque AQUÍ para obtener una lista completa de las bases de datos

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *