代码之家  ›  专栏  ›  技术社区  ›  XZen

传递数组to go pg查询

  •  1
  • XZen  · 技术社区  · 7 年前

    我使用go pg,当我使用以下方法执行SQL查询时:

    db.Query(&result, sqlQuery, params)
    

    哪里 params 是如下结构:

    type MyParams struct {
        Codes []int
    }
    

    sqlQuery

    SELECT id FROM bar WHERE code_id IN (?codes)
    

    在实际的SQL查询中,我得到如下查询:

    SELECT id FROM bar WHERE code_id IN ('[7,45]')
    

    是否可以正确传递int array placeholder以进行查询:

    SELECT id FROM bar WHERE code_id IN (7,45)
    
    3 回复  |  直到 7 年前
        1
  •  2
  •   mu is too short    7 年前

    1. in (...) pg.In
    2. = any(array) in (list) pg.Array

    db.Query(&result, `SELECT id FROM bar WHERE code_id IN (?)`, pg.In(params.Codes))
    

    db.Query(&result, `SELECT id FROM bar WHERE code_id = ANY (?)`, pg.Array(params.Codes))
    
        2
  •  0
  •   cn007b Dheerendra Kulkarni    7 年前

    // Slice with your integer IDs as strings.
    ids := []string{}
    
    // Convert integer ID to string ID.
    for _, i := range []int{7, 45} {
        ids = append(ids, strconv.Itoa(i))
    }
    

    Join

    in := strings.Join(ids, ",")
    query := "SELECT id FROM bar WHERE code_id IN (" + in + ")"
    
        3
  •  0
  •   Himanshu    7 年前

    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

    SELECT * FROM users WHERE level IN (?);
    

    var levels = []int{4, 6, 7}
    rows, err := db.Query("SELECT * FROM users WHERE level IN (?);", levels)
    
    推荐文章