oracle 时间有关函数

1.查询‘2017-12-04’是哪一年哪一月的那一周,注意此时周的计算方法为顺延周(本月的第一到7天为第一周),非自然周。

select TO_CHAR(to_date('2017-12-04', 'yyyy-MM-dd'), 'YYYY') YEAR,

    TO_CHAR(to_date('2017-12-04', 'yyyy-MM-dd'), 'MM') month,

       TO_CHAR(to_date('2017-12-04', 'yyyy-MM-dd'), 'W') week

  from dual

2.查询某日是本年的第几周

SELECT to_char(to_date('2017-12-04', 'yyyy-MM-dd'),'iw') from dual

3.计算当前日期的星期一

select to_char(next_day(sysdate-7,2),'YYYY-MM-DD') from dual

注:next_day()求某日期的下一个星期一,第二个参数可以为1或者2,1表示星期日,2表示星期一(一周的第一天为周日)

select to_char(next_day(sysdate,2),'YYYY-MM-DD') from dual ;--下周周一

select to_char(next_day(sysdate,1),'YYYY-MM-DD') from dual ;--本周日

select to_char(next_day(sysdate+7*n,1),'YYYY-MM-DD') from dual;-n周后的周日

4.

select to_char(trunc(sysdate,'d') , 'yyyy-MM-dd')  from dual; --本周的第一天(上周周日);

select to_char(trunc(sysdate, 'd')+1 , 'yyyy-MM-dd')  from dual;--本周周一

select to_char(trunc(sysdate,'d')+7 ,'yyyy-MM-dd')  from dual;--本周日

select to_char(trunc(sysdate, 'd')+7*n , 'yyyy-MM-dd')  from dual;--n-1周后的周日

5.

select to_char(sysdate - interval '3' day, 'yyyy-MM-dd') from dual;--三天前

select to_char(sysdate - interval '3' month, 'yyyy-MM-dd') from dual;--三月前

select to_char(sysdate - interval '3' year, 'yyyy-MM-dd') from dual;--三年前


6.按周分组,可以先获取日期的周一,然后group by 周一

如:A表有日期和金额字段,求每周的金额合计值

select rq,to_char(trunc(to_date(rq, 'yyyy-MM-dd'), 'd')+1, 'yyyyMMdd') first,sum(money) from A 

group by  to_char(trunc(to_date(rq, 'yyyy-MM-dd'), 'd')+1, 'yyyyMMdd')

7.未来30年的年份

select to_char(sysdate,'yyyy')+rownum from dual connect by ROWNUM <=30

未来12个月的所有月份()

SELECT to_char(add_months(SYSDATE, ROWNUM), 'yyyy-MM') rq
            FROM dual
          connect by ROWNUM <= 12 




 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值