Как использовать подстановочный знак в запросе sqlx в Go?

Я использую sqlx с базой данных mysql и хочу запросить author таблицу для имен, которые начинаются с определенных букв. Вот запрос:

sqlx.DB.Select(&authors, "SELECT * FROM author WHERE first_name LIKE ?% OR last_name LIKE ?%", letter,letter)

но я получаю

У вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис для использования рядом с '% OR last_name LIKE?%'

Я искал в документации примеры LIKE запросов, но не нашел. Так интересно, как я могу это исправить?


person Karlom    schedule 14.10.2016    source источник


Ответы (3)


У вас там %, разве это не ?, ? или :p1, :p2, $1, $2 (независимо от того, какой заполнитель параметра MySQL)

Я бы так сделал:

sqlx.DB.Select(&authors, "SELECT * FROM author WHERE first_name LIKE ? OR last_name LIKE ?",
    letter+"%",letter+"%")

Подстановочный знак % должен быть частью строки параметра.

person Cetin Basoz    schedule 14.10.2016
comment
Работает отлично. Спасибо! - person Karlom; 15.10.2016

Другой способ сделать это - использовать CONCAT:

sqlx.DB.Select(&authors, "SELECT * FROM author WHERE first_name LIKE CONCAT(?, '%') OR last_name LIKE CONCAT(?, '%')", letter, letter)

Надеюсь, это поможет!

person QuarK    schedule 02.04.2018

Вы можете использовать конкатенацию строк SQL:

SELECT * FROM author
WHERE first_name LIKE ? || '%' OR last_name LIKE ? || '%'
person Ainar-G    schedule 14.10.2016
comment
да. Но тогда SQL будет менее гибким (скажем, вы хотите найти точное совпадение или другой шаблон подстановки). - person Cetin Basoz; 14.10.2016