0丢失之谜:解决Oracle中0开头小数被截断的问题

简介: 0丢失之谜:解决Oracle中0开头小数被截断的问题

问题复现:

今天在开发的过程中,遇到这种情况

然后又去oracle数据库里,查看一番,发现数据库寸的是0.9,这个零竟然离奇消失了。

原因

为何小数点前0会省略,是因为Oracle数据库中存在一个隐形类型转换,在拼接的过程中小数自动转成字符类型,相当于调用了to_char函数,所以丢失小数点前面的0

解决方式一:

加上to_char(字段,’fm9999999999999990.00’) ,(查看表结构设计,我这里类型是number(16,2),所以设置前面小数点前面最多16位,后面保留2位)

解释:

其中9代表如果存在数字则显示数字,不存在则显示空格;

0代表如果存在数字则显示数字,不存在则显示0,即占位符;

fm代表删除如果是因9带来的空格,则删除。

解决方式二:

decode(SUBSTR(字段,1,1),'.','0'||字段,字段) 字段别名

解释:

截取值,如果开头是 小数点,那么加个0然后拼接上字段,如果不是,不做改变即可。

总结

处理的办法有很多,当然能解决问题就可以

目录
相关文章
|
6月前
|
SQL Oracle 关系型数据库
【Bug记录】Oracle中小数点前面的0不显示的问题
【Bug记录】Oracle中小数点前面的0不显示的问题
|
Oracle 关系型数据库 数据库连接
oracle保留小数位数
oracle保留小数位数
oracle保留小数位数
|
Oracle 关系型数据库 Shell
ORACLE清理、截断监听日志文件(listener.log)
原文:ORACLE清理、截断监听日志文件(listener.log)        在ORACLE数据库中,如果不对监听日志文件(listener.log)进行截断,那么监听日志文件(listener.log)会变得越来越大,想必不少人听说过关于“LISTENER.LOG日志大小不能超过2GB,超过会导致LISTENER监听器无法处理新的连接”,当然这个不是真理,不会绝对出现,只是发生在老旧的32bit Linux或Unix系统下面,真实的原因是一些32bit OS自带的文件系统不支持2GB以上的文件,导致监听服务进程(tnslsnr)append write日志文件出错。
1176 0
|
29天前
|
存储 Oracle 关系型数据库
Oracle数据库的应用场景有哪些?
【10月更文挑战第15天】Oracle数据库的应用场景有哪些?
153 64
|
19天前
|
SQL Oracle 关系型数据库
Oracle数据库优化方法
【10月更文挑战第25天】Oracle数据库优化方法
26 7
|
19天前
|
Oracle 关系型数据库 数据库
oracle数据库技巧
【10月更文挑战第25天】oracle数据库技巧
22 6
|
19天前
|
存储 Oracle 关系型数据库
Oracle数据库优化策略
【10月更文挑战第25天】Oracle数据库优化策略
17 5
|
26天前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。