Nejjednodušší věc, kterou můžete udělat, je použít regulární výraz k přípravě řetězce tak, aby byl v regulárním výrazu. Escapování neslovních znaků v řetězci by mělo stačit, aby byl bezpečný pro regulární výraz, například:
=> select regexp_replace('. word * and µ{', E'([^\\w\\s])', E'\\\\\\1', 'g');
regexp_replace
--------------------
\. word \* and µ\{
Takže něco takového by obecně mělo fungovat:
where some_text ~* x || regexp_replace(some_field, E'([^\\w\\s])', E'\\\\\\1', 'g') || y
kde x
a y
jsou ostatní části regulárního výrazu.
Pokud jste na konci nepotřebovali regulární výraz (tj. žádné y
výše), pak můžete použít (?q)
:
a q
znamená, že:
Můžete tedy použít:
where some_text ~* x || '(?q)' || some_field
v tomto omezeném případě.