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

Maneira correta de adicionar texto sem escape de um campo a um regex no postgres?


A coisa mais fácil a fazer é usar um regex para preparar sua string para estar em um regex. O escape de caracteres que não são palavras em sua string deve ser suficiente para torná-la segura para regex, por exemplo:
=> select regexp_replace('. word * and µ{', E'([^\\w\\s])', E'\\\\\\1', 'g');
   regexp_replace   
--------------------
 \. word \* and µ\{

Então, algo assim deve funcionar em geral:
where some_text ~* x || regexp_replace(some_field, E'([^\\w\\s])', E'\\\\\\1', 'g') || y

onde x e y são as outras partes da regex.

Se você não precisava de um regex no final (ou seja, não y acima), então você pode usar (?q) :

e um q significa que:

Então você poderia usar:
where some_text ~* x || '(?q)' || some_field

neste caso limitado.