Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PL SQL中从日期中减去13周?_Sql_Oracle_Date - Fatal编程技术网

如何在PL SQL中从日期中减去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日。这将每周改变,因为我

我在sql中有一个日期,它总是落在星期一,我减去13周得到一份周报。我试图得到同样的13周报告,但去年的数字也是如此

目前,我正在使用以下方法:

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日。你说得对!我没有读那部分。我更改了答案,使其返回下一个星期一,而不是前一个星期一的日期。谢谢