Am einfachsten ist es, eine Regex zu verwenden, um Ihren String so vorzubereiten, dass er sich in einer Regex befindet. Das Escapezeichen von Nicht-Wort-Zeichen in Ihrer Zeichenfolge sollte ausreichen, um sie regex-sicher zu machen, zum Beispiel:
=> select regexp_replace('. word * and µ{', E'([^\\w\\s])', E'\\\\\\1', 'g');
regexp_replace
--------------------
\. word \* and µ\{
Also sollte so etwas im Allgemeinen funktionieren:
where some_text ~* x || regexp_replace(some_field, E'([^\\w\\s])', E'\\\\\\1', 'g') || y
wobei x
und y
sind die anderen Teile der Regex.
Wenn Sie am Ende keinen regulären Ausdruck benötigen (d. h. kein y
oben), dann könnten Sie (?q)
:
und ein q
bedeutet, dass die:
Sie könnten also verwenden:
where some_text ~* x || '(?q)' || some_field
in diesem begrenzten Fall.