在grom的官方文档中模糊查询给的方案是这样的:
// LIKE
db.Where("name LIKE ?", "%jin%").Find(&users)
但是在实际操作中,我使用了fmt.Sprintf去拼接where里面的查询条件,如下:
Where(fmt.Sprintf(" dns like %%%s ", createDbnameInfo.DNS))
后面的createDbnameInfo.DNS是我数据中的一个变量,但是一运行到这里就一直报sql错误。
接下来就是各种调试,在网上也没有查阅到相关资料,最后发现模糊查询的like后面的数据需要加上单引号,代码如下:
Where(fmt.Sprintf(" dns like '%%%s' ", createDbnameInfo.DNS))
或者使用%q自带单引号转义:
Where(fmt.Sprintf(" dns like %q ", ("%" + createDbnameInfo.DNS)))
注意一定要将模糊查询的%和数据一起放在单引号里面
希望这次踩的坑对其他golang新手有所帮助