Hal termudah untuk dilakukan adalah menggunakan regex untuk menyiapkan string Anda menjadi regex. Melarikan diri dari karakter non-kata dalam string Anda harus cukup untuk membuatnya aman-regex, misalnya:
=> select regexp_replace('. word * and µ{', E'([^\\w\\s])', E'\\\\\\1', 'g');
regexp_replace
--------------------
\. word \* and µ\{
Jadi sesuatu seperti ini seharusnya berfungsi secara umum:
where some_text ~* x || regexp_replace(some_field, E'([^\\w\\s])', E'\\\\\\1', 'g') || y
dimana x
dan y
adalah bagian lain dari regex.
Jika Anda tidak memerlukan regex di bagian akhir (mis. tidak ada y
di atas), maka Anda dapat menggunakan (?q)
:
dan q
artinya:
Jadi Anda bisa menggunakan:
where some_text ~* x || '(?q)' || some_field
dalam kasus terbatas ini.