取消

Oracle使用Cast转换小数为字符串开头0消失

在oracle中需要把小数转换成字符串返回,这时如果你的数字只有小数部分有值如:0.5,使用cast或者to_char转换都会变成”.5”,这是不符合中国人习惯的。


在oracle中需要把小数转换成字符串返回,这时如果你的数字只有小数部分有值如:0.5,使用cast转换会变成”.5”,这是不符合中国人习惯的。

1
SELECT CAST(0.5 as Varchar(20)) from dual;

这时如果你到网上搜索,不管你怎么搜都只会得到下面这样让你格式化字符串的答案:

1
SELECT to_char(0.5,'fm9999990.9999') from dual;

但是这样仍然有问题,就是你的数刚好是整数,没有小数点,这是会给你加上小数点。

1
SELECT to_char(1,'fm9999990.9999') from dual;

结果变成了这样:

1.

一直冥思苦想都没找到办法解决。经过多方查证(在群里问了下),我的方向选错了,我一直想找一个原生的转换,完全忽略了可以针对这种情况单独处理一下,比如末尾有小数点时直接移除。

1
2
3
4
select RTRIM(to_char(0.5,'fm9999999990.9999'),'.')
,RTRIM(to_char(1,'fm9999999990.9999'),'.')
,RTRIM(to_char(1.5,'fm9999999990.9999'),'.')
from dual

答案很简单,换一种思考方式就可以简单解决问题。差点我就准备改程序把string类型改成float。一天的工作量一下就变成了一小时,又可以划水7小时了。


参考资料

本文会经常更新,请阅读原文: https://dashenxian.github.io/post/Oracle%E4%BD%BF%E7%94%A8Cast%E8%BD%AC%E6%8D%A2%E5%B0%8F%E6%95%B0%E4%B8%BA%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%BC%80%E5%A4%B40%E6%B6%88%E5%A4%B1 ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 小神仙 (包含链接: https://dashenxian.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (125880321@qq.com)

登录 GitHub 账号进行评论