go mysql 字段类型_记golang读取数据库mysql, 字段类型导致,诡异事件

读取一条SQL

SELECT

ufu.userid,

(CASE WHEN ttt.after_amount IS NULL THEN 0

ELSE ttt.after_amount END) AS after_amount,

(CASE WHEN payed.realpay_amount IS NULL THEN 0

ELSE payed.realpay_amount END) AS realpay_amount,

(CASE WHEN payed.pb_amount IS NULL THEN 0

ELSE payed.pb_amount AS signed END) as pb_amount

FROM

ux_first_user ufu

LEFT JOIN t_xp_users xu ON xu.id = ufu.userid

LEFT JOIN t_tmp_trade_tecord ttt ON xu.pbaccountid = ttt.accountid

LEFT JOIN (

SELECT

fo.user_id as user_id,

sum( fo.online_pay_amount ) as realpay_amount,

sum( fo.pay_wallet )as pb_amount

FROM

t_final_order fo

WHERE

fo.paystate = 'p201'

GROUP BY

fo.user_id

) payed ON ufu.userid = payed.user_id WHERE 1=1

AND ufu.bis_date >= '2019-07-01 00:00:00'

AND ufu.bis_date <= '2020-04-30 23:59:59'

本身 t_final_order 表中的 online_pay_amount,pay_wallet字段都是varchar类型

但数据已经保证是int数据,(就是没有null或empty数据)

使用golang查询以上sql,在读取时使用的是int类型接收

defer rows.Close()

for rows.Next() {

var v_userid string

var v_after_amount int

var v_realpay_amount int

var v_pb_amount int

rows.Scan(&v_userid, &v_after_amount, &v_realpay_amount, &v_pb_amount)

最终结构发现部分数据,本身有值,但也记为了0,查找问题无果的情况下,使用 string类型接受数据,发现,部分数据, 给出了一个30293+e..类似科学技术法的串,但通过工具查看,是正常的一个数(数并没要超过Int类型长度)

最终解决办法,修改sql,强行转换类型

SELECT

ufu.userid,

(CASE WHEN ttt.after_amount IS NULL THEN 0

ELSE CAST(ttt.after_amount AS signed) END) AS after_amount,

(CASE WHEN payed.realpay_amount IS NULL THEN 0

ELSE CAST(payed.realpay_amount AS signed) END) AS realpay_amount,

(CASE WHEN payed.pb_amount IS NULL THEN 0

ELSE CAST(payed.pb_amount AS signed) END) as pb_amount

FROM

完美解决。

实际情况是

WHEREAND ufu.bis_date >= ?

AND ufu.bis_date <= ?

原web项目是通过传递时间,bindvalue进行查询的!(出现问题)

项目代码通过console方式,where条件直接写死,查询(又没有问题)

总之,复制查询, sql最好确定类型。避免不必要的麻烦。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:游动-白 设计师:我叫白小胖 返回首页
评论

打赏作者

列蒂齐亚

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值