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

我在这里看到了一个非常相似的问题但我不确定管道在命令中做了什么,而且它对我来说无论如何都不起作用。

所以,这是我尝试过的代码。

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 "("

所以我猜出于某种原因,它传递的命令比我想要的更多……也许是引用问题?我尝试了其他一些事情,但没有任何效果。任何帮助表示赞赏。


开满天机
浏览 153回答 3
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 complainfmt.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.%%'"))

弑天下

为了安全起见,您应该使用准备好的语句使用查询,您可以使用 CONCAT 进行连接:rows, err := db.Query("SELECT * FROM mytable WHERE mycolumn LIKE CONCAT(?, '%')", camel)希望能帮助到你!

拉丁的传说

你可以使用 LIKE '%' || camel. || '%'
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go