您的位置:首页 > 博客中心 > 数据库 >

Oracle日期周详解以及周开始结束时间计算

时间:2022-03-10 18:05


--取周的开始时间和结束时间 SELECT TRUNC(TO_DATE('2014-07-18','YYYY-MM-DD'),'IW') AS STARTDATE FROM DUAL;--本周周一 SELECT TRUNC(TO_DATE('2014-07-18','YYYY-MM-DD'),'IW') + 6 AS ENDDATE FROM DUAL;--本周周日 SELECT TRUNC(TO_DATE('2014-07-18','YYYY-MM-DD'),'IW') - 7 AS STARTDATE FROM DUAL;---上周周一 SELECT TRUNC(TO_DATE('2014-07-18','YYYY-MM-DD'),'IW') - 1 AS ENDDATE FROM DUAL;--上周周日

--按照周一到周日为一周算周的开始时间和结束时间(IW)自然周 WITH PARAMS AS (SELECT TRUNC(TO_DATE('2009-01-01','YYYY-MM-DD'),'YYYY') AS SD FROM DUAL) SELECT LEVEL 周次, DEcode(SIGN(5-DEcode(TO_CHAR(PM.SD,'D'),'1','7',TO_CHAR(PM.SD,'D'))),-1, NEXT_DAY(PM.SD+(LEVEL-1)*7,2),NEXT_DAY(PM.SD+(LEVEL-1)*7-7,2)) 当周第一天, DEcode(SIGN(5-DEcode(TO_CHAR(PM.SD,'D'),'1','7',TO_CHAR(PM.SD,'D'))),-1, NEXT_DAY(PM.SD+(LEVEL-1)*7,2),NEXT_DAY(PM.SD+(LEVEL-1)*7-7,2)) + 6 当周最后一天 FROM DUAL D LEFT JOIN PARAMS PM ON 1=1 CONNECT BY LEVEL<=53 --按照周日到周六为一周算周的开始时间和结束时间(D) SELECT LEVEL 周次,(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY')-7) + (7-TO_CHAR(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY'),'D')+1)+(LEVEL-1)*7 当周第一天, (TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY')-7) + (7-TO_CHAR(TRUNC(TO_DATE('2011-01-01','YYYY-MM-DD'),'YYYY'),'D')+1)+(LEVEL-1)*7+6 当周最后一天 FROM DUAL CONNECT BY LEVEL<=53 --按照ORACLE标准(WW) SELECT LEVEL 周次,TO_DATE('2013-01-01','YYYY-MM-DD')+(LEVEL-1)*7 当周第一天, TO_DATE('2013-01-01','YYYY-MM-DD')+(LEVEL-1)*7+ DEcode((TO_CHAR(TO_DATE('2013-12-31','YYYY-MM-DD'),'DDD')-(LEVEL-1)*7),1,0,2,1,6) 当周最后一天 FROM DUAL CONNECT BY LEVEL<=53

--获取一年中的最大周次(IW)中国日历自然周 WITH PARAMS AS (SELECT '2014' AS NF FROM DUAL) SELECT TO_CHAR(TO_DATE(PM.NF || '-12-28','YYYY-MM-DD'),'IYYYIW') FROM DUAL LEFT JOIN PARAMS PM ON 1=1

上述SQL通过卡每年的12月28号属于哪个周,也判断一年有多少个自然周。


5   特别应该注意的地方


取周别的时候最好把年份带上,第一因为周别是相对于哪年的第几周,第二因为当使用IW的时候对于一年的开始那几天和结束那几天可能会产生一样的周数,就分不清属于哪年的第一周。


热门排行

今日推荐

热门手游