由于业务需要,把本来的varchar2转换成了number(22,2),其中有一个字段存储的是0.xx类型的数据。问题来了,今天再次查询发现数据库中存储的是0.01,但是查询结果是.01,开始以为是代码问题,排查后发现问题在于bean中是string,在查询映射转换中把前面的0省略掉了(度娘说是存储时为了节省空间,可是表里会什么没有省略0呢?查询做char转换才省略?)
网上搜到了几种解决办法:
1)select to_char(rate) from mytest;


2)select case when rate like '.%' then '0'||rate else to_char(rate) end from mytest;


4) select to_char(rate,'fm9999990.9999') from mytest;

猜想:前面说的为什么数据库中显示的是0.22,我觉得实际存储应该 还是0.22,只是在查询中做了隐是式转换,代码底层把number类转换成了string.通过substring函数截取第一位是点不是0,可能是在subtrings时就已经先to_char把number转了类型。。