一种方法是创建一个带有分隔符的字符串来创建一个字符串,然后将其传递db.query
给 获取结果。
package main
import (
"fmt"
"strconv"
"strings"
)
func main() {
a := []int{7,45,32}
str := ConvertToString(a, ",")
query := `Select * from table1 where ID IN(`+ str +`)`
fmt.Println(query)
}
func ConvertToString(a []int, delim string) string{
var b string
for _, v := range a{
b += strconv.Itoa(v)
b += ","
}
return strings.Trim(b,",")
}
Playground上的工作代码。
编辑:-
您可以根据需要使用Golang sqlx包。
database/sql
package 不会检查您的查询,它会将您的参数直接传递给驱动程序,这使得处理带有 IN 子句的查询变得困难:
SELECT * FROM users WHERE level IN (?);
当这被准备为后端的语句时, bindvar ? 将只对应一个参数,但通常需要的是根据某个切片的长度可变数量的参数,例如:
var levels = []int{4, 6, 7}
rows, err := db.Query("SELECT * FROM users WHERE level IN (?);", levels)