Oracle数据库,数字强制显示2位小数(转)
2016-03-18 17:19
513 查看
Oracle数据库,数字强制显示2位小数
在银行、财务等对数字要求敏感的系统中,数字的显示一般有着严格的要求。
今遇到一个需求,如题,要求将数字以两位小数的格式显示,如果没有小数,则强制显示为0。
例如:
123.4 显示为 123.40
12 显示为 12.00
0 显示为 0.00
本以为这是个比较简单的问题,Oracle本身提供了to_char函数,带有格式化功能,能够满足条件:
[sql] view plain
select to_char(123.4, '9999990.00') as aa from dual;
select to_char(12, '9999990.00') as aa from dual;
select to_char(0, '9999990.00') as aa from dual;
select to_char(123.4, 'fm9999990.00') as aa from dual;
select to_char(12, 'fm9999990.00') as aa from dual;
select to_char(0, 'fm9999990.00') as aa from dual;
至此,本以为问题解决了,但是却没有注意到,以上的语句格式化的是字符串,而不是数字!!
需求中,很明确的要求,将数字格式化,结果仍然为数字。
分析:该需求是一个非常常见、且正常的需求,既然Oracle如此强大,应该会提供相关的方法,
于是乎,查找Oracle的相关文档,终于,找到个有个cast函数,该函数负责类型转换,尝试之。
结果显示,该方法确实可行。测试SQL语句如下:
[sql] view plain
select CAST(1234.4 AS NUMBER (10, 2) ) as aa from dual ;
select CAST(12 AS NUMBER (10, 2) ) as aa from dual ;
select CAST(0 AS NUMBER (10, 2) ) as aa from dual ;
PS:追加一点,字符串可以直接进行类型转换,而无需使用to_number()函数做中间转换。SQL语句如下:
[sql] view plain
select CAST('1234.4' AS NUMBER (10, 2) ) as aa from dual ;
select CAST('12' AS NUMBER (10, 2) ) as aa from dual ;
select CAST('0' AS NUMBER (10, 2) ) as aa from dual ;
PS:追加第二点,网上看到有人说,小数点后是否显示完全,PL/SQL的版本有关。
本人未做验证,不发表个人意见,仅在此记录一下,如以后遇到问题,再行验证。
另外,我们在使用的时候还会有有以下容易犯的小问题
select to_char(0.413488888, '999,999,990.99999') as aa from dual;
结果: 0.41349,会自动用空格将前面精度不足的位数补齐,另外,,会使用千分位补齐
select to_char(0.413488888, 'fm999,999,990.99999') as aa from dual;
结果:0.41349,结果正常
select to_char(0.413488888, 'fm999,999,999.99999') as aa from dual;
结果:.41349
在银行、财务等对数字要求敏感的系统中,数字的显示一般有着严格的要求。
今遇到一个需求,如题,要求将数字以两位小数的格式显示,如果没有小数,则强制显示为0。
例如:
123.4 显示为 123.40
12 显示为 12.00
0 显示为 0.00
本以为这是个比较简单的问题,Oracle本身提供了to_char函数,带有格式化功能,能够满足条件:
[sql] view plain
select to_char(123.4, '9999990.00') as aa from dual;
select to_char(12, '9999990.00') as aa from dual;
select to_char(0, '9999990.00') as aa from dual;
select to_char(123.4, 'fm9999990.00') as aa from dual;
select to_char(12, 'fm9999990.00') as aa from dual;
select to_char(0, 'fm9999990.00') as aa from dual;
至此,本以为问题解决了,但是却没有注意到,以上的语句格式化的是字符串,而不是数字!!
需求中,很明确的要求,将数字格式化,结果仍然为数字。
分析:该需求是一个非常常见、且正常的需求,既然Oracle如此强大,应该会提供相关的方法,
于是乎,查找Oracle的相关文档,终于,找到个有个cast函数,该函数负责类型转换,尝试之。
结果显示,该方法确实可行。测试SQL语句如下:
[sql] view plain
select CAST(1234.4 AS NUMBER (10, 2) ) as aa from dual ;
select CAST(12 AS NUMBER (10, 2) ) as aa from dual ;
select CAST(0 AS NUMBER (10, 2) ) as aa from dual ;
PS:追加一点,字符串可以直接进行类型转换,而无需使用to_number()函数做中间转换。SQL语句如下:
[sql] view plain
select CAST('1234.4' AS NUMBER (10, 2) ) as aa from dual ;
select CAST('12' AS NUMBER (10, 2) ) as aa from dual ;
select CAST('0' AS NUMBER (10, 2) ) as aa from dual ;
PS:追加第二点,网上看到有人说,小数点后是否显示完全,PL/SQL的版本有关。
本人未做验证,不发表个人意见,仅在此记录一下,如以后遇到问题,再行验证。
另外,我们在使用的时候还会有有以下容易犯的小问题
select to_char(0.413488888, '999,999,990.99999') as aa from dual;
结果: 0.41349,会自动用空格将前面精度不足的位数补齐,另外,,会使用千分位补齐
select to_char(0.413488888, 'fm999,999,990.99999') as aa from dual;
结果:0.41349,结果正常
select to_char(0.413488888, 'fm999,999,999.99999') as aa from dual;
结果:.41349
相关文章推荐
- oracle 日期格式
- oralce代理用户登录--工作备忘2016/03/09
- 关于oracle的数查询
- Oracle Study之--AIX 6.1安装Oracle 11gR2
- Oracle Study之--AIX 6.1安装Oracle 11gR2
- Oracle 11g学习1——基础介绍
- Oracle学习笔记2 ---- 连接数据库
- MyEclipse用Java语言连接Oracle数据库
- oracle学习笔记1-安装
- oracle 默认是升序还是降序
- Oracle connect by..start with/level
- Oracle的取整和四舍五入函数——floor,round,ceil,trunc使用说明
- 查看Oracle中是否有锁表的sql
- Oracle内连接、左外连接、右外连接、全外连接小总结
- 朝花夕拾之Oracle 索引
- oracle显示窗口列表
- android和excel和oracle的关联
- Oracle 索引 详解
- word和oracle和adb的关联
- ORACLE 闪回技术操作