Oracle 数据插入时发现小于零的数字都变成了点几几的,小数点前面的零不见了

目录

背景:

原因:

解决方式 就是对sum()聚合函数做to_char处理:


不想看原因的,请直接跳转到最后.查看解决方式

背景:

     突然接到一个bug, 说是小于零的数据 在数据库中显示异常, 不显示 0.55 而显示 .55,小数点前面的零不见了,这就很奇怪了.怎么会这样.查看发现大于零的数字都不会这样.只有小于零的数字会这样.怪事;

经过排查 将问题定位到了数据合并插入的时候;
查看存储过程发现在合并插入的过程中有这么一段

insert into tableName( column1, column2, ....) 
    select   t2.column1,  sum(t2.column2) ,...
        from TableName2 t2  where  A = A and B=B..... 

就是这么一句语句 .问题就出现在sum(t2.column2)   

原因:

  1. 经过查看,我发现t2.column2  在tableName2 中是varchar2  类型的也就是讲它是一个字符串属性的数据
  2. 经过sum()聚合函数后被转化成了number 属性 也就是数字 
  3. 然后在插入的时候,数字转换成字符串的时候 会隐式调用 to_char(number,'fm9999999999.99'),然后0 就被干掉了;

演示 1:  

select to_char(sum(0.12)) from dual

结果:

演示2 :

select to_char(0.12) from dual

结果:

其实这是因为 to_char 格式化 默认传的格式化参数是 fm999999999.99  所以0被干掉了

解决方式 :

就是对sum()聚合函数做to_char处理,处理方式如下:

select to_char(sum('0.012'),'fm9999990.999') from dual

结果如下:

以上便是我解决此bug的方式,如果你们还有其他好的方式请留言,最后关于FM 格式化的知识,大家请自行百度

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值