使用数组去postgres`SELECT * IN`

时间:2018-11-06 18:53:21

标签: postgresql go

我有一个简单的选择语句:

Select * FROM X where X.name in ("bob", "joe") and X.phone='123'

在postgres中很好用,

在我的Go代码中,我有以下代码:

var phone string = "123"
var names []string = []string{"bob", "joe"}
sqlStatement := `Select * FROM X where X.name in ($1) and X.phone=$2`
rows, sqlerr := db.Query(sqlStatement, names, phone)

但是由于某种原因,我从该sql中出错了。

  

不受支持的扫描,将driver.Value类型存储为* string

类型

我如何在sqlstatement旁边使用我的名称数组?

注意:如果我执行fmt.printf并将sql语句粘贴到postgres中,则我会获取数据+如果我取出$ 1,并手动输入字符串

2 个答案:

答案 0 :(得分:2)

从一些有效的Go PostgreSQL代码中复制和粘贴片段:

import (
    "database/sql"
    "github.com/lib/pq"
)

    query := `
            . . .
            WHERE code = ANY($1)
           . . .

        `

    codes := []string{"JFK", "LGA", "EWR"}
    rows, err := db.Query(query, pq.Array(codes))

答案 1 :(得分:0)

我用http://jmoiron.github.io/sqlx/#inQueries

解决了这个问题
var phone string = "123"
var names []string = []string{"bob", "joe"}
sqlStatement := `Select * FROM X where X.name in (?) and X.phone=?`
sqlStatement, args, err := sqlx.In(sqlStatement, names, phone)
sqlStatement = db.Rebind(sqlStatement)
        rows, sqlerr := db.Queryx(sqlStatement, args...)

现在可以正确返回。

解决此问题的另一种方法是使用fmt.Sprintf()并将?转换为%s