2015-10-11 54 views
0

我试图使用GORP库与MySQL的MySQL NULL值问题

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 \”:无效语法

这里柱outputo ctets是类型BIGINT。我也尝试将SelectInt更改为SelectStr,然后抛出以下错误;在列索引0

扫描错误:不支持的驱动器 - \ u003e扫描对: \ u003cnil \ u003e - \ u003e *串

当我跑没有位置过滤器的查询,它的工作。看起来像这是由于位置列中存在一些NULL值。但是,我需要在查询上有位置过滤器。我该如何解决这个问题?

+0

MySQL为查询输出的内容是什么? – 0x434D53

+0

它总是一个数字SUM(outputoctets) – Anuruddha

+0

如果没有匹配的行,则SUM()返回NULL – Mark

回答

0

看起来额外的位置标准正在过滤所有结果,所以sum(outputoctets)为空。 \u003cnil\u003e是字符串"<nil>",它拒绝为无效整数。

使用 '可为空的' 类型保持的总和,例如,NullInt64

可替代地,使用mysql IFNULL功能,以避免从查询返回一个空值,例如,IFNULL(总和(outputoctets),0)

查看Go database tutorial了解更多信息

+0

为什么downvote? – Mark