我在 golang 中的 Postgres 查询有什么问题(LIKE 匹配)
What's wrong with my Postgres query inside of golang (LIKE matching)
我见过一个非常相似的问题 here,但我不确定管道在命令中的作用,而且它对我不起作用。
所以,这是我试过的代码。
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. 开头的任何内容,所以 camel.*
我在这两个示例中得到的错误是
pq: syntax error at or near "("
所以我猜出于某种原因,它作为命令传递的那一行比我想要的要多......也许是报价问题?我尝试了一些其他的东西,但没有任何效果。感谢任何帮助。
func Sprintf(format string, a ...interface{}) string
Sprintf formats according to a format specifier and returns the resulting string.
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.%%'"))
为了安全起见,您应该使用准备好的语句进行查询,您可以使用 CONCAT 进行连接:
rows, err := db.Query("SELECT * FROM mytable WHERE mycolumn LIKE CONCAT(?, '%')", camel)
希望对您有所帮助!
您可以使用 LIKE '%' || camel. || '%'
我见过一个非常相似的问题 here,但我不确定管道在命令中的作用,而且它对我不起作用。
所以,这是我试过的代码。
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. 开头的任何内容,所以 camel.*
我在这两个示例中得到的错误是
pq: syntax error at or near "("
所以我猜出于某种原因,它作为命令传递的那一行比我想要的要多......也许是报价问题?我尝试了一些其他的东西,但没有任何效果。感谢任何帮助。
func Sprintf(format string, a ...interface{}) string
Sprintf formats according to a format specifier and returns the resulting string.
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.%%'"))
为了安全起见,您应该使用准备好的语句进行查询,您可以使用 CONCAT 进行连接:
rows, err := db.Query("SELECT * FROM mytable WHERE mycolumn LIKE CONCAT(?, '%')", camel)
希望对您有所帮助!
您可以使用 LIKE '%' || camel. || '%'