Имя: Пароль:
IT
Админ
PostgreSQL: like и %
0 грязный
 
14.01.11
08:37
В запросе есть:
... like lower('%'||coalesce(?,'')||'%') ...

Если переменная содержит символ % - то получается фигня. Как сделать, чтобы спецсимволы в переменной не портили запрос?
1 ДенисЧ
 
14.01.11
08:41
в нормальном сервере для like есть параметр ESCAPE .
2 грязный
 
14.01.11
08:42
Да, есть. Как только его использовать с переменными, не могу найти в мане.
3 ДенисЧ
 
14.01.11
08:44
like lower('%'||coalesce(?,'')||'%') escape '!'

а в переменной Заменить("%", "!%")
4 orefkov
 
14.01.11
08:46
за postgres точно не скажу, но в sqlite в соответствии со стандартом можно писать так
like lower('%' || coalesce(replace(?, '%', '\%'), '') || '%') escape '\'
5 ДенисЧ
 
14.01.11
08:54
(4) ну я примерно то же и написал
6 грязный
 
14.01.11
09:10
(3) теперь невозможен поиск строки содержащей один символ - '!' :)
7 ДенисЧ
 
14.01.11
09:11
(6) Ищи !!
8 грязный
 
14.01.11
09:12
(7) ну это понятно, просто пользователь так делать не будет
9 ДенисЧ
 
14.01.11
09:12
(8) Ты за пользователя сделай. Заменить(стр, "!", "!!")
10 грязный
 
14.01.11
09:16
(9) уже понял. Спасибо