0

我正在尝试使用带有 mysql 的 gorp 库运行以下查询

query = "SELECT SUM(outputoctets) FROM monthlyacct where date >= ? AND date < ? AND location = ?"
count, err := dbMap.SelectInt(query , constrains.From, constrains.To, constrains.LocationId)

此查询引发以下错误,

列索引 0 上的扫描错误:将字符串 \"\u003cnil\u003e\" 转换为 int64:strconv.ParseInt:解析 \"\u003cnil\u003e\":语法无效

这里的列 outputoctets 是 BIGINT 类型。我也尝试将 SelectInt 更改为 SelectStr,然后它抛出了以下错误;

列索引 0 上的扫描错误:不支持的驱动程序 -\u003e 扫描对:\u003cnil\u003e -\u003e *string

当我在没有位置过滤器的情况下运行查询时,它起作用了。似乎这是由于位置列中存在一些 NULL 值。但是我需要对查询进行位置过滤器。我该如何解决这个问题?

4

1 回答 1

1

看起来附加的位置条件正在过滤掉所有结果,因此 sum(outputoctets) 为空。\u003cnil\u003e是 string "<nil>",它被拒绝为无效整数。

使用“可为空”类型来保存总和,例如NullInt64

或者,使用 mysql IFNULL函数来避免从查询中返回空值,例如 IFNULL(sum(outputoctets),0)

有关更多信息,请参阅Go 数据库教程

于 2015-10-12T01:42:51.937 回答