【问题标题】:Get all dates in a week获取一周内的所有日期
【发布时间】:2017-01-28 03:35:55
【问题描述】:

当我从双重选择日期时。我必须用天显示特定周的所有日期。

首先我得到周数使用

select to_char(sysdate,'iw') FROM dual

通过使用周数,我想获取该特定周的所有日期。我用过这个。

SELECT (TRUNC ( TO_DATE (SUBSTR ('201704', 1, 4) 
         || '0131', 'YYYY'|| 'MMDD'), 'IYYY') +
              ( 7 * ( TO_NUMBER (SUBSTR ('201704', 5)) - 1)) ) AS iw
FROM   DUAL

我的输入是 sysdate。

我必须得到如下的o/p。

23-Jan-2017
24-Jan-2017
25-Jan-2017
26-Jan-2017
27-Jan-2017
28-Jan-2017
29-Jan-2017

【问题讨论】:

  • 你的代码在哪里?见:How to Ask
  • 来吧 - 当你发布一个家庭作业问题时,你必须包含你编写的代码,告诉我们你期望的结果,你得到了什么,你得到了什么问题。否则你就不走运了。
  • 先生,来吧,请检查 nw 并感谢您的反馈
  • 我的输入是 sysdate 要求的输出是本周的日期

标签: sql oracle oracle10g


【解决方案1】:

试试这个:

select trunc(sysdate,'IW') + level - 1
from dual
connect by level <= 7;

如果您想手动提供日期而不是 sysdate,您可以例如这样做:

select trunc(to_date('10-Feb-2017','dd-Mon-yyyy'),'IW') + level - 1
from dual
connect by level <= 7;

如果您想在多个日期应用此功能,请使用交叉连接:

with t(dt) as (
  select to_date('23-Jan-2017','dd-Mon-yyyy') from dual union all
  select to_date('01-Mar-2017','dd-Mon-yyyy') from dual
)
-- test data ends here

select dt, trunc(dt,'IW') + n dt2
from t cross join (
      select level - 1 n
      from dual
      connect by level <= 7
);

【讨论】:

  • 不是从我手动输入的表中选择 trunc('04-Apr-2017','W') + level from dual connect by level
  • 它不工作 - 你的意思是你得到一个错误?请在这里张贴日期?你使用 to_date 函数了吗?
  • 但是周六到周五只有我需要周一到周日检查这个选择 trunc(to_date('28-Sep-2017'),'W') + level from dual connect by level
  • 您错误地修改了查询。使用SELECT TRUNC(to_date('28-Sep-2017'),'IW') + level - 1 FROM dual CONNECT BY level &lt;= 7; 注意IW 和level - 1。 IW 代表 ISO 周 - 周一到周日
猜你喜欢
  • 1970-01-01
  • 2010-12-26
  • 1970-01-01
  • 1970-01-01
  • 2019-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多