导航

Oracle 使用函数累计

Posted on 2013-01-15 15:40  小强有毒  阅读(524)  评论(0)    收藏  举报

时间/日期处理:

1.NEXT_DAY(date,char) 获取date时间下个char(星期几)日期。
date:参数为日期型。
char:为1~7或Monday/Mon~Sunday/ 指定时间的下一个星期几(由char指定)所在的日期,har也可用1~7替代,还可以是星期一、星期二~~星期日
select next_day(sysdate,'星期日') from dual; 
select next_day(sysdate,'3') from dual; --国外的日期类型,周日为星期一
2. 本周,本月,本年
--本周
select trunc(sysdate, 'd') + 1 from dual;--周一
select trunc(sysdate, 'd') + 7 from dual;--周日
--本月
select trunc(sysdate, 'mm') from dual;--本月第一天
select last_day(trunc(sysdate)) from dual;--本月最后一天
--本季
select trunc(sysdate, 'Q') from dual;--本季第一天
select add_months(trunc(sysdate, 'Q'), 3) - 1 from dual;--本季最后一天
--本年
select trunc(sysdate, 'yyyy') from dual;--本年第一天
select add_months(trunc(sysdate, 'yyyy'), 12) - 1 from dual;--本年最后一天
实例(自定义一周开始结束):数据的统计时间为 :“上周的周六” 开始到 “本周的周五” 结束。
select case to_char(sysdate, 'D') --得到当天在本周的星期几
         when '7' then --如果是周六
          sysdate --返回当天
         else
          sysdate - (to_char(sysdate, 'D')) --否则,返回上周六(此处公式为当日减去自身的周几+1)
       end 开始时间,
       case to_char(sysdate, 'D') --得到当天在本周的星期几
         when '7' then --如果是周六
          next_day(sysdate, 6) --结束时间返回下周五
         else
          trunc(sysdate, 'D') + 5 --trunc(sysdate, 'D')得到本周一,+5则是获取周五
       end 结束时间
  from dual