如何从PL SQL中的日期减去13周?

时间:2016-05-16 13:13:25

标签: sql oracle date

我在sql中有一个日期,它总是在星期一,我要减去13周来获得每周报告。我试图获得相同的13周报告,但去年的数据也是如此。

目前,我正在使用以下内容:

calendar_date >=  TRUNC(sysdate) - 91

工作正常。

去年我需要同样的东西。

然而,当我将其分为日历周时,也将有一个部分完整的一周,因为它将包括上一周的1或2天。我只需要整整几个星期。

e.g。将于2015年2月14日至2015年5月16日期间返回的日期为2015年2月14日。我需要它在星期一开始,并在2015年2月16日。这将每周改变,因为我只对整周感兴趣...

2 个答案:

答案 0 :(得分:1)

我会这样做:

  • 通过减去你已经做过的91天来获取日期。
  • 使用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秒)。