Oracle to_char转数字小结

简介:

Oracle常用的函数大概为110个左右,所以日常开发中如遇到一些问题,可以思考下是否可以通过SQL解决,因为这110个函数都是Oracle原生的,其正确率与效率一般来说应该都比我们自己写的强,但是别乱用(如放在where条件里一般都是不对的)。且Oracle是公司花了百八十万买回来的,不用对不起这钱啊。
举个简单的例子: 求当前是星期几 ,
Java 代码:
view plain
Calendarc = Calendar.getInstance();
c.setTime(new Date());
System.out.println(c.get(Calendar.DAY_OF_WEEK));
你会发现上面的代码有点小问题
1:输出的是阿拉伯数字,不是对应的“星期—”格式,所以你要写个对照表
2:如果你是个苦逼的程序员,你会忘记,java 里“星期日”是 一周的开始,你的显示就可能有问题
而如果是SQL,则一句话:
 selectto_char(sysdate,'day') from dual; 且是货真价实的中文类似“星期一”的格式。

切入正题,我之所以讲这个,是因为项目组里遇到一个问题,正常查出来的类似0.1的数据,前面的0会丢掉。然后以前我做了一个比较二的建议, 通过Sign和1比较,再decode
view plain
decode(sign(t.compliance_rate - 1),
                   -1,
                   '0' || t.compliance_rate || '%',
                   0,
                   t.compliance_rate || '%',
                   NULL,
                   NULL,
                   1,
                   t.compliance_rate || '%') compliance_rate,
这个真正应用场景是比较时间,数值的大小等

今天又遇到类似的问题,我决定要解决下了。然后我很认真认真的翻了to_char的使用方法(API很抽象,某些网上的例子写的有问题,解释也是有错误或不到位。结合具体的方法,总结如下:
例子:
select to_char(0.596,'FM999,999,999,990.00') from dual
它的执行结果如下:

怎样使查出来类似0.60的小数带0,答案是:使用如上的格式即
1:其9代表:如果存在数字则显示数字,不存在则显示空格
2:其0代表:如果存在数字则显示数字,不存在则显示0,即占位符。
3:其FM代表:删除如果是因9带来的空格,则删除之
具体区别可以见
Selec length(to_char(1.00,'999,999,999,999,999,999,999,990.00')), length(to_char(1.00,'FM999,999,999,999,999,999,999,990.00')) from dual
其结果是:

4:四舍五入:0.596变成了0.60不知道大家注意到了没有。如果不要四舍五入,则需要trunc下,具体如下:
select to_char(trunc(0.596,2),'FM999,999,999,999,990.00') from dual
其结果是0.59
5:解决列表100,000,000的情况
select to_char(10000000000,'FM999,999,999,990.00') from dual

上面的功能适用于固定小数点格式。而如果没有小数点了?
6:解决整数后面多个点的情况
select to_char(10000000000,'FM999,999,999,990.99') from dual
会出现类似的情况:10,000,000,000.
此类的解决方案则需要进行先判断词数据是否包含.(点的情况)
如果有点则 instr()下
否则直接to_cahr()
此功能适用于:页面展示不出0(类的自定义的属性,A类不存在属性b,通过sqlMap查询赋值的情况下适合,正常情况下不需要使用),前后台列表展示不显示0,前后台列表的10,000,000,000格式。
 










本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/737016,如需转载请自行联系原作者
目录
相关文章
|
8月前
|
机器学习/深度学习 人工智能 Oracle
在Oracle中,TO_CHAR()、TO_NUMBER()和TO_DATE()函数的使用方法以及作用
在Oracle中,TO_CHAR()、TO_NUMBER()和TO_DATE()函数的使用方法以及作用
234 0
Zp
|
SQL Oracle 关系型数据库
Oracle 通过sql to_date()和 to_char() 转化日期格式
Oracle 通过sql to_date()和 to_char() 转化日期格式
Zp
384 0
Oracle 通过sql to_date()和 to_char() 转化日期格式
|
移动开发 Oracle 关系型数据库
Oracle to_char 函数
Oracle to_char 函数
565 0
|
SQL Oracle 关系型数据库
[沫沫金原创]Oracle去除Date时分秒 不用to_char然后再to_date这么麻烦
1、你是否在Sql编写中遇到Datetime类型,只想保留到日期去除时分秒呢? 2、你是否需要繁琐的进行date转varchar再转回date? 现在,告诉所有亲:不用这么麻烦! select trunc(sysdate) from dual  --2013-01-06 直接就OK,从此轻装上阵,带你装逼带你飞。
1843 0
|
SQL Oracle 关系型数据库
|
Oracle 关系型数据库
|
Oracle 关系型数据库
oracle Extract,to_char 函数
//oracle中extract()函数从oracle 9i中引入,用于从一个date或者interval类型中截取到特定的部分   //语法如下:   EXTRACT...
926 0
|
Oracle 关系型数据库 MySQL
oracle、sqlserver、mysql常用函数对比[to_char、to_number、to_date]
oracle                                       -->                             mysql to_char(sysdate,'yyyy-mm-dd')-->date_format(sysdate(),'%Y-%m-%d');t...
2201 0

推荐镜像

更多