Точное совпадение с sql like и bind - PullRequest
0 голосов
/ 25 мая 2010

У меня есть привязка в запросе SQL

SELECT * FROM users WHERE name LIKE '%?%'

привязка установить ?.

Теперь, если я хочу выполнить поиск аналогичным методом, все работает, но если без изменения в sql я хочу найти точное совпадение, я не могу сейчас это сделать.

Я попробовал несколько регулярных выражений в текстовом поле es: _jon \ jon \ [jon] и некоторые другие, но ничего не работает должным образом.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 25 мая 2010

Измените ваш запрос на

select * from users where name like '?'

Если вы хотите выполнить сопоставление с подстановочными знаками, поместите подстановочные знаки как часть строки, которую вы привязываете к переменной. Если вы не хотите использовать подстановочный знак, не делайте этого.

Обратите внимание, что like и = имеют одинаковую производительность , за исключением , когда ваш символ подстановки является первым в строке (например, '%bob'), как в этом случае оптимизатор запросов также не может использовать индексы для поиска искомых строк.

0 голосов
/ 25 мая 2010

Что мешает вам изменить SQL?

Условие Like для «похожих» совпадений, а «=» - для точных.

0 голосов
/ 25 мая 2010

вы не можете найти точное совпадение, если sql содержит символы%, так как они являются символами подстановки. вам нужно изменить sql на

select * from users where name = '?'

для точного соответствия

(вы также можете использовать select * from users where name like '?', но это более неэффективно)

...