我在sql中有一个日期,它总是在星期一,我要减去13周来获得每周报告。我试图获得相同的13周报告,但去年的数据也是如此。
目前,我正在使用以下内容:
calendar_date >= TRUNC(sysdate) - 91
工作正常。
去年我需要同样的东西。
然而,当我将其分为日历周时,也将有一个部分完整的一周,因为它将包括上一周的1或2天。我只需要整整几个星期。
e.g。将于2015年2月14日至2015年5月16日期间返回的日期为2015年2月14日。我需要它在星期一开始,并在2015年2月16日。这将每周改变,因为我只对整周感兴趣...
答案 0 :(得分:1)
我会这样做:
TO_CHAR(DATE,'d')
这样的事情:
SELECT TO_DATE(TO_DATE('16/05/2015','DD/MM/YYYY'),'DD/MM/YYYY')-91 + MOD(7 - TO_NUMBER(TO_CHAR(TO_DATE(TO_DATE('16/05/2015','DD/MM/YYYY'),'DD/MM/RRRR')-91,'d'))+1,7) d
FROM dual
答案 1 :(得分:1)
next_day - 返回以char命名的第一个工作日的日期。
with dates as (select to_date('16/05/2015','DD/MM/YYYY') d from dual)
select
trunc(next_day( trunc(d-91) - interval '1' second,'MONDAY'))
from dates;
我希望从计算日期开始下一个星期一。在计算日期是星期一的情况下,我必须回到前一周(-1秒)。