解决Oracle出现以0开头的小数,开头的0消失的问题
项目中碰到了个问题,本来报表需要显示“0.49%”,结果就是显示成“.49%”
找问题
首先在pl/sql工具里执行sql,发现原始的数据就是“.49%”,那么问题来了,原始sql的问题,跟工具无关了。
因为.49和“%”是通过字符串拼接的形式合成的,Oracle中存在一个隐形类型转换的问题,在拼接的过程中小数自动转成字符类型,相当于调用了to_char函数。
在类型隐形转换开始前先把小数转换成字符类型就不回出现这个问题了。
如:
select to_char(0.12,'fm9999990.9999') ||'%' from dual;
给小数一个格式然后转换为字符类型可以解决这个问题。
当然此方法还可以解决强制性保留几位小数位,比如,‘0.5’,怎么让它变成 ‘0.5000’,很简单,上面的方法就可以用
select to_char(0.5,'fm9999990.0000') ||'%' from dual;
有时候我们也会遇到1,2,3 需要转换为01,02,03 那么也可以使用这种方法
SELECT to_char(2,'fm00') FROM dual;
2就会变为02了