
Oracle 时间加减法 由于最近在做时段加减法相关的测试工作,在网上找到了一些关于时间加减方面的算法,正好可以解决燃眉之急,也希望
Oracle 时间加减法
由于最近在做时段加减法相关的测试工作,在网上找到了一些关于时间加减方面的算法,正好可以解决燃眉之急,也希望能够帮到更多的Oracle初学者!
加法 
 select sysdate,add_months(sysdate,12) from dual; --加1年
 select sysdate,add_months(sysdate,1) from dual; --加1月
 select sysdate,to_char(sysdate+7,'yyyy-mm-dd HH24:MI:SS') from dual; --加1星期
 select sysdate,to_char(sysdate+1,'yyyy-mm-dd HH24:MI:SS') from dual; --加1天
 select sysdate,to_char(sysdate+1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --加1小时
 select sysdate,to_char(sysdate+1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1分钟
 select sysdate,to_char(sysdate+1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --加1秒
减法
 select sysdate,add_months(sysdate,-12) from dual; --减1年
 select sysdate,add_months(sysdate,-1) from dual; --减1月
 select sysdate,to_char(sysdate-7,'yyyy-mm-dd HH24:MI:SS') from dual; --减1星期
 select sysdate,to_char(sysdate-1,'yyyy-mm-dd HH24:MI:SS') from dual; --减1天
 select sysdate,to_char(sysdate-1/24,'yyyy-mm-dd HH24:MI:SS') from dual; --减1小时
 select sysdate,to_char(sysdate-1/24/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1分钟
select sysdate,to_char(sysdate-1/24/60/60,'yyyy-mm-dd HH24:MI:SS') from dual; --减1秒
按时间段统计:注意,,要根据Oracle中实际的类型而对sql语句做相应的改变:
代码来源:
select to_char((trunc(sysdate)+trunc((dtime-trunc(sysdate))*24*60/30)*30/60/24),'hh24:mi')||'-'||to_char((trunc(sysdate)+trunc((dtime-trunc(sysdate))*24*60/30+1)*30/60/24),'hh24:mi') period, avg(v1),sum(v2),count(*) "ROWS" from test where trunc(dtime)=to_date(&day,'yyyymmdd') group by to_char((trunc(sysdate)+trunc((dtime-trunc(sysdate))*24*60/30)*30/60/24),'hh24:mi')||'-'||to_char((trunc(sysdate)+trunc((dtime-trunc(sysdate))*24*60/30+1)*30/60/24),'hh24:mi') order by 1;
我的修改:
select to_char((trunc(sysdate) +
 trunc((to_date(to_char(passvehicleinfo.passtime,
 'yyyymmdd hh24:mi:ss'),
 'yyyymmdd hh24:mi:ss') - trunc(sysdate)) * 24 * 60 / 30) * 30 / 60 / 24),
 'hh24:mi') || '-' || to_char((trunc(sysdate) + trunc((to_date(to_char(passvehicleinfo.passtime, 'yyyymmdd hh24:mi:ss'), 'yyyymmdd hh24:mi:ss') - trunc(sysdate)) * 24 * 60 / 30 + 1) * 30 / 60 / 24), 'hh24:mi')
 from passvehicleinfo
 group by to_char((trunc(sysdate) +
 trunc((to_date(to_char(passvehicleinfo.passtime,
 'yyyymmdd hh24:mi:ss'),
 'yyyymmdd hh24:mi:ss') - trunc(sysdate)) * 24 * 60 / 30) * 30 / 60 / 24),
 'hh24:mi') || '-' || to_char((trunc(sysdate) + trunc((to_date(to_char(passvehicleinfo.passtime, 'yyyymmdd hh24:mi:ss'), 'yyyymmdd hh24:mi:ss') - trunc(sysdate)) * 24 * 60 / 30 + 1) * 30 / 60 / 24), 'hh24:mi')
更多Oracle相关信息见Oracle 专题页面 ?tid=12
 
 
