如何在PL SQL中从日期中减去13周?
我在sql中有一个日期,它总是落在星期一,我减去13周得到一份周报。我试图得到同样的13周报告,但去年的数字也是如此 目前,我正在使用以下方法:如何在PL SQL中从日期中减去13周?,sql,oracle,date,Sql,Oracle,Date,我在sql中有一个日期,它总是落在星期一,我减去13周得到一份周报。我试图得到同样的13周报告,但去年的数字也是如此 目前,我正在使用以下方法: calendar_date >= TRUNC(sysdate) - 91 这很好用 我去年需要同样的 但是,当我将其划分为日历周时,也会有一个部分完整的一周,因为它将包括前一周的1或2天。我只需要整整几个星期 e、 g.上一年的返回日期为2015年2月14日至2015年5月16日。我需要从周一开始,到2015年2月16日。这将每周改变,因为我
calendar_date >= TRUNC(sysdate) - 91
这很好用
我去年需要同样的
但是,当我将其划分为日历周时,也会有一个部分完整的一周,因为它将包括前一周的1或2天。我只需要整整几个星期
e、 g.上一年的返回日期为2015年2月14日至2015年5月16日。我需要从周一开始,到2015年2月16日。这将每周改变,因为我只对完整的几周感兴趣…我会这样做:
- 通过减去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
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秒) 好吧,你可以减去52周,这总是给你周一的时间。但是,你可能需要为一年中额外的一周进行纠正:如果你的公司在13周内工作,那么他们处理额外一周的逻辑是什么?偶尔在圣诞节期间使用14周?为什么你要编辑代码使其完全相同?而且,trunc没有在SQL server中使用,所以我认为它是PL SQL。谢谢你的回答,我会试着用几周的时间来代替。最初的版本没有被格式化为代码,尽管它也很清楚。您可以使用上面的“编辑”链接将标签放回或完全回滚更改。(你也可能不得不@him来引起他的注意——它把这句话指向我,因为它猜你是在回复我的评论。)啊,对了,很抱歉。我不想从他那里得到另一个答案,所以不用担心。一个警告:他的例子是日期后的星期一减去91:他想要的是2月16日,而不是2月14日。你说得对!我没有读那部分。我更改了答案,使其返回下一个星期一,而不是前一个星期一的日期。谢谢