Вы можете использовать префикс E в предложении where перед строкой, используя двойную обратную косую черту, чтобы экранировать следующий символ:
WHERE LOWER(contact_name) LIKE LOWER(E'\\_McDonald%')
ИЛИ Вы можете сделать добавленную оговорку Escape, как показано ниже:
WHERE LOWER(contact_name) LIKE LOWER('@_McDonald%') ESCAPE '@'
Обратите внимание, что первый метод будет работать с предложениями LIKE, SIMILAR TO и NOT SIMILAR TO, но вышеописанный метод будет работать также с более мощными регулярными выражениями POSIX, такими как ~, ~ ,
! ~,! ~
В документах вы также можете увидеть некоторые функции, которые могут быть полезны, такие как regexp_replace
, где вы можете попробовать это, чтобы экранировать специальные символы в поле contact_name:
SELECT
regexp_replace(contact_name, '([!$()*+.:<=>?[\\\]^{|}-])', '\\\1', 'g')
FROM
contacts
WHERE
LOWER(contact_name) LIKE LOWER('_McDonald%')
ORDER BY
LOWER(contact_name) ASC LIMIT 1;