Det enklaste du kan göra är att använda ett regex för att förbereda din sträng för att vara i ett regex. Escapende tecken som inte är ord i din sträng bör vara tillräckligt för att göra den regex-säker, till exempel:
=> select regexp_replace('. word * and µ{', E'([^\\w\\s])', E'\\\\\\1', 'g');
regexp_replace
--------------------
\. word \* and µ\{
Så något sådant här borde fungera generellt:
where some_text ~* x || regexp_replace(some_field, E'([^\\w\\s])', E'\\\\\\1', 'g') || y
där x
och y
är de andra delarna av det regex.
Om du inte behövde ett regex i slutet (dvs ingen y
ovan), då kan du använda (?q)
:
och en q
betyder att:
Så du kan använda:
where some_text ~* x || '(?q)' || some_field
i detta begränsade fall.