Най-лесното нещо, което можете да направите, е да използвате регулярен израз, за да подготвите своя низ да бъде в регулярен израз. Ескейпирането на знаци, които не са думи, във вашия низ трябва да е достатъчно, за да го направи безопасен за регулярен израз, например:
=> select regexp_replace('. word * and µ{', E'([^\\w\\s])', E'\\\\\\1', 'g');
regexp_replace
--------------------
\. word \* and µ\{
Така че нещо подобно трябва да работи като цяло:
where some_text ~* x || regexp_replace(some_field, E'([^\\w\\s])', E'\\\\\\1', 'g') || y
където x
и y
са другите части на регулярния израз.
Ако нямате нужда от регулярен израз в края (т.е. без y
по-горе), тогава можете да използвате (?q)
:
и q
означава, че:
Така че можете да използвате:
where some_text ~* x || '(?q)' || some_field
в този ограничен случай.