转到模板以连接切片中的查询

时间:2015-01-20 00:51:12

标签: sql templates go

我想将我的SQL查询与UNION ALL和golang http://golang.org/pkg/text/template/

连接起来

例如,我有:

var slice1 = []string{"2014-01-01", "2014-01-02", "2014-01-03"}
var slice2 = []string{"20140101", "20140102", "20140103"}

并查询:

select {{.date}} as date, itemid, price
from orderhistory_t{{datetag}}

使用模板我想创建如下的查询:

select '2014-01-01' as date, itemid, price
from orderhistory_t20140101

union all 

select '2014-01-02' as date, itemid, price
from orderhistory_t20140102

union all 

select '2014-01-03' as date, itemid, price
from orderhistory_t20140103

如何遍历Golang片段并将它们放入sql模板?

提前谢谢!

1 个答案:

答案 0 :(得分:2)

我认为模板不适合这项工作。只需创建查询字符串并在此处加入即可:

http://play.golang.org/p/mM0mMfBZFK

package main

import (
    "fmt"
    "strings"
)

var slice1 = []string{"2014-01-01", "2014-01-02", "2014-01-03"}
var slice2 = []string{"20140101", "20140102", "20140103"}

func main() {
    var parts []string
    for i := 0; i < len(slice1); i++ {
        parts = append(parts, fmt.Sprintf("select %q as date, itemid, price from orderhistory_t%s", slice1[i], slice2[i]))
    }
    fmt.Println(strings.Join(parts, " union all "))
}

输出:

  

从orderhistory_t20140101选择“2014-01-01”作为日期,itemid,价格   union all选择“2014-01-02”作为日期,itemid,价格来自   orderhistory_t20140102 union all选择“2014-01-03”作为日期,itemid,   价格来自orderhistory_t20140103