【问题标题】:How to use wildcard in sqlx query in Go?如何在 Go 的 sqlx 查询中使用通配符?
【发布时间】:2018-04-02 17:47:10
【问题描述】:

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

【问题讨论】:

    标签: go sqlx


    【解决方案1】:

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

    我会这样做:

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

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

    【讨论】:

    • 效果很好。谢谢!
    【解决方案2】:

    另一种方法是使用 CONCAT:

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

    希望对你有帮助!

    【讨论】:

      【解决方案3】:

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

      SELECT * FROM author
      WHERE first_name LIKE ? || '%' OR last_name LIKE ? || '%'
      

      【讨论】:

      • 是的。但是这样的话 SQL 就不够灵活了(比如你想搜索一个完全匹配或另一个通配符模式)。
      猜你喜欢
      • 2022-01-19
      • 2017-03-26
      • 2021-09-18
      • 1970-01-01
      • 1970-01-01
      • 2019-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多