在FLOATS上使用GROUP_CONCAT进行SQL查询的应用程序返回[] uint8而不是实际的[] float64

时间:2019-04-03 15:42:05

标签: sql go

在我的go应用程序进行的查询中使用group_concat遇到问题。

有人知道为什么FLOATS的group_concat在Go侧看起来像[] uint8吗?

似乎无法正确转换吸盘。

它肯定是浮动的,我可以在原始查询结果中看到它,但是当我在go中执行相同的查询并尝试扫描时,Go抱怨说它是[]uint8而不是{{1} }(实际上是这样)尝试转换为浮点数会给我错误的值(并且它们的数量过多)。

例如,在数据库中,我查询并为有问题的列获取2个浮点数,如下所示:

[]float64

但是,在运行中,go看到的是"5650.50, 5455.00" 而不是[]uint8。为什么会这样?如何解决这个问题以获得实际结果?

我的问题是,由于要使用的数据库的性质,我必须将此SQL与[]float64一起使用,这是获取信息的最佳方法,更重要的是查询本身可以工作很好,返回函数需要的数据,但是由于类型问题,我现在无法读出它。对这些人并不陌生,但是Go今天不与我合作。

我很高兴了解为什么Go Go会以这种方式进行操作,并且很高兴学习处理它的方法。

示例:

group_concat

与实际数据库(不在我的应用程序中)连接时,实际结果为

SELECT ID, getDistance(33.1543,-110.4353, Loc.Lat, Loc.Lng) as distance,
GROUP_CONCAT(values) FROM stuff INNER JOIN device on device.ID = stuff.ID WHERE (someConditionsETC) GROUP BY ID ORDER BY ID

显然是2个浮点数。

从Go查询并尝试扫描时,相同的结果会产生uint8的一部分。如果我在范围内进行搜索并打印这些值,则得到的值将大于2,它们是"5650.00, 5850.50" (字节) ),如下所示:

uint8

不确定Go希望我如何处理。

解决方案...。愚蠢的简单而不是显而易见的:

解决方案:

53,55,56,48,46,48,48

是的,现在很明显。

1 个答案:

答案 0 :(得分:1)

GROUP_CONCAT返回一个字符串。因此,在Go语言中,您得到的是字节字符数组,而不是浮点数。您发布的结果delta转换为字符串“ 5780.00”,看起来确实像是您的值之一。因此,您需要修复SQL以返回浮点数,或者在Go中使用字符串和strconv模块来解析并将字符串转换为浮点数。我认为前一种方法更好,但这取决于您。