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

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

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。