解决go显示select结果为科学计数法的问题
sql语句如下:执行后,使用map集合传入前台,显示可能为科学计数法(这里为什么说可能,因为本地不会显示,但是在服务器和小关电脑上会显示,很奇怪,也不知道为什么)
SELECT dd.Name,
cc.待处理新增,
cc.待处理变更,
cc.待处理注销,
cc.已处理新增,
cc.已处理变更,
cc.已处理注销,
cc.本次特殊处理,
cc.永久特殊处理,
TO_CHAR (cc.合并异常)
FROM table1
改为如下SQL:先设定所有的字段类型为字符型,这样所有的显示就不会出现可续计数法
SELECT TO_CHAR (dd.Name),
TO_CHAR (cc.待处理新增),
TO_CHAR (cc.待处理变更),
TO_CHAR (cc.待处理注销),
TO_CHAR (cc.已处理新增),
TO_CHAR (cc.已处理变更),
TO_CHAR (cc.已处理注销),
TO_CHAR (cc.本次特殊处理),
TO_CHAR (cc.永久特殊处理),
TO_CHAR (cc.合并异常)
FROM table1
问题猜疑:可能是字符集的问题,但是只是电脑不同,所以也可能是环境的问题,很难解决
问题探索:
新设计代码,使用三种不同类型接收
package main
import (
"database/sql"
"log"
)
func main() {
db, err := sql.Open("oci8", "tjbm/tjbm")
if err != nil {
panic(err)
}
if err != nil {
panic(err)
}
defer db.Close()
var aa sql.NullString
var bb sql.NullFloat64
var cc sql.NullInt64
var dd sql.NullString
row, err := db.Query(`
SELECT sum(aa),
sum(bb),
sum(cc),
sum(dd),
FROM table`)
if err != nil {
panic(err)
}
for row.Next() {
if err := row.Scan(&aa, &bb, &cc, &dd); err != nil {
panic(err)
}
log.Println(aa, bb, cc, dd)
}
defer row.Close()
}
首次执行发现,数据都能接收,这时候发现执行结果为:
2019/03/19 16:18:19 {广西壮族自治区 true} {2000 true} {0 true} {11 true}
是不是就没错误了呢~非也!!!
给SQL中值增加,值超过六位数,这里不用真的去数据库插入那么多数据,可以使用then语句条件判断,如果符合,返回1000,和sum一起用就好了
SUM (
CASE
WHEN b.变动类型 = '1'
AND b.待处理 = '1'
THEN
1
END)
AS 待处理新增,
这时候发现运行报错:
time=20190319T163404 level=info msg="执行统计赋值出错 sql: Scan error on column index 1, name \"待处理新增\": converting driver.Value type float64 (\"1.936e+06\") to a int64: invalid syntax"
这时候发现,当数值超过6位数,就形成了科学计数法,这时候,把int64 去接收有小数的float,就会报错,同时,也侧面描述了select中的值是float类型的返回。