码迷,mamicode.com
首页 > 数据库 > 详细

oracle数据库中的相关积累(持续更新)

时间:2015-04-09 15:43:42      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

nvl2(exp1,exp2,exp3)  虑空函数
检测表达式exp1,exp1不为空时值为exp2,空时为exp3
NVL2(表达式,不为空设值,为空设值)
 
小数转为百分数
select to_char(round(0.1*100,3),‘990.99‘) || ‘%‘ from dual
其中0.1为要转换的小数
添加虑空后
select to_char(round(nvl2(‘null‘,‘1‘,‘0‘)*100,3),‘990.99‘) || ‘%‘ from dual
 
类似if..else 的语句
case exp1 when … then value1…..end
decode(exp1,’key1’,’value1’, ’key2’,’value2’,’其他’)
oracle中发现的执行效率问题:
 
对于2条sql:
sql1:  select count(1) from v_ryxssj t where to_char(t.JZRQ,‘yyyy-MM-dd‘)=‘2015-03-31‘
 
sql2:  select count(1) from v_ryxssj t where t.JZRQ=to_date(‘2015-03-31‘,‘yyyy/MM/dd‘);
 
数据量不小的时候,查询的速度差距很大
sql1用时31s,sql2用时1s
总结:尽量不要改变数据库中字段
 
 
关于时间的转换问题:
 
效率较高的是时间字段以数据库中的为基准。
数据中字符串型20140406,那么sql写为这样:
select * from sale_task r where r.task_end_date>=’20140406’;
 
注意:oracle中的日期为字符串时,是可以互相比较的。
 
转为timestamp格式to_timestamp() 和to_timestamp_tz
 
数据库中为    20-3月 -15 07.23.18.794000 下午
select * from task_split_record r where r.split_time>=to_timestamp(‘2014‘,‘yyyy‘) and  r.split_time<=to_timestamp_tz(‘2015‘,‘yyyy‘);
这句是查询2015年的数据
 
又比如:to_timestamp_tz(‘2015/04/01 11:55:10‘,‘yyyy/mm/dd HH24:MI:SS‘)
http://blog.csdn.net/csh602583095/article/details/32130967

oracle数据库中的相关积累(持续更新)

标签:

原文地址:http://my.oschina.net/u/576818/blog/398007

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!