sql >> Base de Datos >  >> RDS >> PostgreSQL

¿La forma correcta de agregar texto sin escape de un campo a una expresión regular en postgres?

Lo más fácil de hacer es usar una expresión regular para preparar su cadena para que esté en una expresión regular. Escapar caracteres que no son palabras en su cadena debería ser suficiente para que sea seguro para expresiones regulares, por ejemplo:

=> select regexp_replace('. word * and µ{', E'([^\\w\\s])', E'\\\\\\1', 'g');
   regexp_replace   
--------------------
 \. word \* and µ\{

Así que algo como esto debería funcionar en general:

where some_text ~* x || regexp_replace(some_field, E'([^\\w\\s])', E'\\\\\\1', 'g') || y

donde x y y son las otras partes de la expresión regular.

Si no necesitaba una expresión regular al final (es decir, no y arriba), entonces podría usar (?q) :

y una q significa que:

Así que podrías usar:

where some_text ~* x || '(?q)' || some_field

en este caso limitado.