Oracl解决小数0.不显示问题
转载至:https://blog.csdn.net/qq_34909807/article/details/76270987
首先在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了
其中0代表无论前后位的数都显示0,9代表前后位数如果是0则不显示,如果不是0则显示。
注:fm后面0或9要和你的数值对应,类似于正则表达式。不能有0或9之类的数字否则会报无效的数字格式模型
select to_char(01110.10200,\'fm9990.090999\') ||\'%\' from dual;
注:要转换的数值整数位的长度不能超过fm整数位长度,如果为0则无所谓。
select to_char(011110.10200,\'fm9990.090999\') ||\'%\' from dual;
select to_char(001110.10200,\'fm9990.090999\') ||\'%\' from dual;