Проблема с нулевым значением MySQL в SelectInt gorp

Я пытаюсь выполнить следующий запрос, используя библиотеку gorp с mysql.

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

Этот запрос выдает следующую ошибку:

Ошибка сканирования по индексу столбца 0: преобразование строки \"\" в int64: strconv.ParseInt: анализ \"\": неверный синтаксис

Здесь выходные октеты столбца имеют тип BIGINT. Я также попытался изменить SelectInt на SelectStr, после чего возникла следующая ошибка:

Ошибка сканирования по индексу столбца 0: неподдерживаемый драйвер -> Пара сканирования: -> *string

Когда я выполнил запрос без фильтра местоположения, он сработал. Похоже, это связано с наличием некоторых значений NULL в столбце местоположения. Однако мне нужно иметь фильтр местоположения в запросе. Как я могу это решить?


person Anuruddha    schedule 11.10.2015    source источник
comment
Что MySQL выводит для запроса?   -  person 0x434D53    schedule 12.10.2015
comment
Это всегда число SUM(outputoctets)   -  person Anuruddha    schedule 12.10.2015
comment
SUM() возвращает NULL, если нет совпадающих строк   -  person Mark    schedule 12.10.2015


Ответы (1)


Похоже, что дополнительные критерии местоположения отфильтровывают все результаты, поэтому сумма (выходные октеты) равна нулю. \u003cnil\u003e — это строка "<nil>", которую go отклоняет как недопустимое целое число.

Используйте тип 'nullable' для хранения суммы, например, NullInt64

В качестве альтернативы используйте функцию mysql IFNULL. чтобы избежать возврата null из запроса, например, IFNULL(sum(outputoctets),0)

Дополнительные сведения см. в руководстве по базе данных Go.

person Mark    schedule 12.10.2015