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.