【问题标题】:MySQL NULL value issue on SelectInt gorpSelectInt gorp 上的 MySQL NULL 值问题
【发布时间】:2016-01-09 03:00:39
【问题描述】:

我正在尝试使用带有 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\" 转换为 a int64: strconv.ParseInt: 解析\"\u003cnil\u003e\": 无效语法

这里的列输出字节是 BIGINT 类型。我也试过把SelectInt改成SelectStr,然后报错了;

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

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

【问题讨论】:

  • MySQL 为查询输出什么?
  • 总是一个数字 SUM(outputoctets)
  • SUM() 如果没有匹配的行,则返回 NULL

标签: mysql go gorp


【解决方案1】:

看起来附加的位置条件正在过滤掉所有结果,因此 sum(outputoctets) 为空。 \u003cnil\u003e 是字符串"&lt;nil&gt;",它作为无效整数被拒绝。

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

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

查看Go database tutorial了解更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2016-07-16
    • 1970-01-01
    相关资源
    最近更新 更多