oracle中关于小数中0的格式化(55天)

作者: admin 分类: 公众号存档            1 次浏览 发布时间: 2014-04-27 14:01

公众号:杨建荣的学习笔记 · 作者:笔记55天 · 发布:2014-04-27 14:01:04 · 原文链接

今天碰到一个小问题,分享一下。

oracle中输入0.1查出的时候是.1,现在想把结果格式化成varchar2,格式化成0.10,保留两位精度。

先拿大于1的数试验,没问题

SQL> select to_char(1.1,’99999999.99′) from dual;

TO_CHAR(1.1,
————
1.10

SQL> c/1.1/.1
1* select to_char(.1,’99999999.99′) from dual
SQL> /

TO_CHAR(.1,’
————
.10

–结果有问题

貌似可以用这种方式

SQL> select to_char(.1,’999999990.99′) from dual;

TO_CHAR(.1,’9
————-
0.10

或者
SQL> select to_char(.1,’fm9999999990.00′) from dual;

TO_CHAR(.1,’FM
————–
0.10

–这样不可以

SQL> select to_char(.12,’fm999999.99′) from dual;

TO_CHAR(.1
———-
.12

但是对于上面的两种方法,仔细琢磨一下,会发现 差别还是很大的。

SQL> select to_char(.1,’999999990.99′),length(to_char(.1,’999999990.99′)) from dual;

TO_CHAR(.1,’9 LENGTH(TO_CHAR(.1,’999999990.99′))
————- ———————————-
0.10 13

SQL> select to_char(.1,’fm9999999990.00′) ,length(to_char(.1,’fm9999999990.00′)) from dual;

TO_CHAR(.1,’FM LENGTH(TO_CHAR(.1,’FM9999999990.00′))
————– ————————————-
0.10 4

–用符合隔开来分辨。

SQL> select ‘>>’||TO_CHAR(123.1,’FM99999.99’)||'<<‘,’>>’||TO_CHAR(123.1,’9999.99′)||'<<‘ from dual;

‘>>’||TO_CHAR ‘>>’||TO_CHA
————- ————
>>123.1<< >> 123.10<<

第二种会有隐式的分隔。

所以根据具体的需要还是要区别对待,

默认保险起见还是用如下的方式

SQL> select to_char(.1,’fm9999999990.00′) ,length(to_char(.1,’fm9999999990.00′)) from dual;

TO_CHAR(.1,’FM LENGTH(TO_CHAR(.1,’FM9999999990.00′))
————– ————————————-
0.10 4
这样就可以自动去除前面的空格。

admin

杨建荣,《Oracle DBA工作笔记》《MySQL DBA工作笔记》作者,dbaplus社群发起人之一,腾讯云TVP,现任竞技世界系统部经理,拥有十多年数据库开发和运维经验,目前专注于开源技术、运维自动化和性能调优

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注