我在 golang 内部的 Postgres 查询有什么问题(喜欢匹配)



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

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

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

所以我猜出于某种原因,它作为命令传递的那行比我想要的要多......也许是报价问题? 我尝试了其他一些方法,但没有任何效果。 任何帮助,不胜感激。

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

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.%%'"))
<</div> div class="one_answers">

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

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

希望对您有所帮助!

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

最新更新