6

我将 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查询示例,但找不到任何查询。所以想知道我该如何解决这个问题?

4

3 回答 3

8

%在那里,那些不是?,?:p1, :p2, $1, $2(无论 MySQL 参数占位符是什么)

我会这样做:

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

通配符%应该是参数字符串的一部分。

于 2016-10-14T09:24:18.167 回答
3

另一种方法是使用 CONCAT:

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

希望能帮助到你!

于 2018-04-02T09:47:10.023 回答
1

您可以使用 SQL 字符串连接:

SELECT * FROM author
WHERE first_name LIKE ? || '%' OR last_name LIKE ? || '%'
于 2016-10-14T10:19:23.200 回答