为了账号安全,请及时绑定邮箱和手机立即绑定

我在 golang 中的 Postgres 查询出了什么问题(LIKE 匹配)

我在 golang 中的 Postgres 查询出了什么问题(LIKE 匹配)

Go
开满天机 2022-01-17 10:37:13
我在这里看到了一个非常相似的问题,但我不确定管道在命令中做了什么,而且它对我来说无论如何都不起作用。所以,这是我尝试过的代码。rows, err := db.Query(fmt.Sprintf("SELECT * FROM mytable WHERE mycolumn LIKE 'camel.%'"))即使,我不知道它是做什么用的,我也尝试过使用管道。rows, err := db.Query(fmt.Sprintf("SELECT * FROM mytable WHERE mycolumn LIKE 'camel. || %'"))所以,它应该做的是匹配该列中以骆驼开头的任何内容,所以 camel.*我得到的两个例子的错误是pq: syntax error at or near "("所以我猜出于某种原因,它传递的命令比我想要的更多……也许是引用问题?我尝试了其他一些事情,但没有任何效果。任何帮助表示赞赏。
查看完整描述

3 回答

?
米脂

TA贡献1836条经验 获得超3个赞

func Sprintf(format string, a ...interface{}) 字符串


Sprintf 根据格式说明符格式化并返回结果字符串。


mt.Println(fmt.Sprintf("SELECT * FROM mytable WHERE mycolumn LIKE 'camel%'"))


//Output:

//SELECT * FROM mytable WHERE mycolumn LIKE 'camel%!'(MISSING)

//Ofc postgres will complain

fmt.Sprintf在这种情况下您不需要。


rows, err := db.Query("SELECT * FROM mytable WHERE mycolumn LIKE 'camel.%'")

工作正常。


但是如果你真的需要使用fmt.Sprintf你必须用 '%%' 转义 '%'


rows, err := db.Query(fmt.Sprintf("SELECT * FROM mytable WHERE mycolumn LIKE 'camel.%%'"))


查看完整回答
反对 回复 2022-01-17
?
弑天下

TA贡献1818条经验 获得超8个赞

为了安全起见,您应该使用准备好的语句使用查询,您可以使用 CONCAT 进行连接:

rows, err := db.Query("SELECT * FROM mytable WHERE mycolumn LIKE CONCAT(?, '%')", camel)

希望能帮助到你!


查看完整回答
反对 回复 2022-01-17
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

你可以使用 LIKE '%' || camel. || '%'


查看完整回答
反对 回复 2022-01-17
  • 3 回答
  • 0 关注
  • 152 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信