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

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

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
这样就可以自动去除前面的空格。

原文发布于微信公众号 - 杨建荣的学习笔记(jianrong-notes)

原文发表时间:2014-04-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏王小雷

SAS进阶《深入解析SAS》之对多数据集的处理

SAS进阶《深入解析SAS》之对多数据集的处理 1. 数据集的纵向串接: 数据集的纵向串接指的是,将两个或者多个数据集首尾相连,形成一个新的数据集。 据集的横...

2068
来自专栏wOw的Android小站

[Objective-C] 从NSInteger说开去

初写iOS时,我做的是把原项目从Android端移植到iOS端。因为涉及到不同语言,又因为不熟悉iOS,加上还要与用C写的网络库进行纠缠,我小心翼翼的用了基本数...

221
来自专栏专知

关关的刷题日记85 – Leetcode 326. Power of Three

关关的刷题日记85 – Leetcode 326. Power of Three 题目 Given an integer, write a function t...

35110
来自专栏Jed的技术阶梯

Hive案例03-最高气温

现有hive表temp,其中只有一个字段(temp_record string),每一行代表某一天的气温,比如,2014010114代表,2014年1月1日的气...

663
来自专栏知晓程序

想学潮汕话?这款小程序,教你最纯正的发音

小程序体验师:郭诺亚 广东的大潮汕地区,不止盛产牛肉丸、牛肉火锅,还有笋粿蚝烙菜头粿,肠粉粿条猪脚圈,分分钟撑起一部深夜食堂。

613
来自专栏WOLFRAM

九宫格数独游戏

1528
来自专栏GreenLeaves

ORACLE中%TYPE和%ROWTYPE的使用

1、%TYPE 为了使一个新定义的变量与另一个已经定义了的变量(通常是表的某一列)的数据类型保持一致,Oracle提供了%Type的定义方式,当被参照的那个变量...

1817
来自专栏软件测试经验与教训

数据库基础知识

743
来自专栏数据结构与算法

高效判断素数方法

孪生素数: 所谓孪生素数指的是间隔为 2 的相邻素数,它们之间的距离已经近得不能再近了。 若n≥6且n-1和n+1为孪生素数,那么n一定是6的倍数。 证明: ∵...

2634
来自专栏杨建荣的学习笔记

使用sql语句分析双色球(85天)

这个题目看似有点无厘头,老写技术博客,也来干点“正事",用sql语句分析一下近十年来的双色球情况,不过我肯定算不出来开奖结果,纯属个人娱乐, 个人觉得概率让一切...

2596

扫描关注云+社区