0

我使用 Gorm 进行了原始 sql 查询,如下所示:

updateValues[fmt.Sprintf("code%d", 0)] = prices[0].Code
updateValues[fmt.Sprintf("bid%d", 0)] = prices[0].BidPrice
updateValues[fmt.Sprintf("last%d", 0)] = prices[0].LastTradedPrice
updateValues2 = append(updateValues2, fmt.Sprintf("(@code%d, @last%d, @bid%d)", 0, 0, 0))

query := "UPDATE myTable as e set"
query += " last = case when c.last > 0 THEN c.last else e.last end,"
query += " bid = case when c.bid > 0 THEN c.bid else e.bid end"
query += " from (values" + strings.Join(updateValues2, ", ")
query += ") as c(code, last, bid) where c.code = e.code"

err = r.db.Exec(query, updateValues).Error

日志显示此错误:

2021/03/13 21:08:05 repo.go:102 pq: operator does not exist: text > integer
[0.236ms] [rows:0] UPDATE myTable as e set last = case when c.last > 0 THEN c.last else e.last end, bid = case when c.bid > 0 THEN c.bid else e.bid end from (values('XXXX', 169.000000, 0.000000)) as c(code, last, bid) where c.code = e.code

当 169.000000 和 0.000000 周围没有单引号时,为什么它说 text > integer?我也在数据库控制台上运行查询并且它有效

4

0 回答 0