trueCamelType trueCamelType - 6 months ago 31
SQL Question

What's wrong with my Postgres query inside of golang (LIKE matching)

I've seen a very similar problem here, but I'm not certain what the pipes do in the command, and it didn't work for me anyway.

So, here's the code I've tried.

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


And even though, I have no idea what it's for, I also tried with the pipes.

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


So, what it should be doing, is matching anything in that column that starts with camel., so
camel.*


The error I'm getting for both examples is

pq: syntax error at or near "("


So i'm guessing for some reason it's passing in more of that line as the command than I would like....maybe a quote problem? I've tried a few other things, but nothing has worked. Any help is appreciated.

Answer

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

You do not need fmt.Sprintf in this case.

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

works fine.

But if you really need to use fmt.Sprintf you must escape '%' with '%%'

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