我正在寻找一个我必须解决的Pl Sql问题的建议/最佳实践,我必须运行每周一次的proc,这将在每一天迭代整个星期,现在我只是想知道如何确定我到/从日期开始 一周中的每一天,让我们举一个2015年8月11日结束的一周的例子。 我必须得到数据11 / 02,11 / 03,11 / 04 /,11/05 /,11 / 06,11 / 07,11 / 08,所以我和我的日期应该以这样的方式给出proc可以每天迭代整周。
我想我必须提供更多的清晰度,我的问题是我必须确保我的from和to_date准确捕获从上午12点到晚上23:59的数据,即整天,所以标准是from_date =午夜12点,to_date =同一天的23:59 pm,当我每周星期一晚上运行我的过程时,整天应该每天捕获整周的数据。
感谢任何输入。
答案 0 :(得分:0)
您可以使用行生成器方法获取当前ISO周的所有日期(启动星期一并结束周日强>)
SQL> SELECT TRUNC(sysdate,'IW') + level - 1 the_date
2 FROM dual
3 CONNECT BY LEVEL <= 7
4 /
THE_DATE
----------
02/11/2015
03/11/2015
04/11/2015
05/11/2015
06/11/2015
07/11/2015
08/11/2015
7 rows selected.
更新 OP实际上希望获得当天的第一个和最后一秒作为 FROM_DATE 和 TO_DATE 。
您可以在当天添加一天,然后使用 + 1 - (INTERVAL&#39; 1&#39; SECOND)减去一秒,以获得当天的最后一秒。
例如,
SQL> SELECT TRUNC(SYSDATE,'IW') + LEVEL - 1 FROM_DATE,
2 TRUNC(SYSDATE,'IW') + LEVEL - 1 + 1 - (INTERVAL '1' SECOND) TO_DATE
3 FROM dual
4 CONNECT BY LEVEL <= 7
5 /
FROM_DATE TO_DATE
------------------- -------------------
11/02/2015 00:00:00 11/02/2015 23:59:59
11/03/2015 00:00:00 11/03/2015 23:59:59
11/04/2015 00:00:00 11/04/2015 23:59:59
11/05/2015 00:00:00 11/05/2015 23:59:59
11/06/2015 00:00:00 11/06/2015 23:59:59
11/07/2015 00:00:00 11/07/2015 23:59:59
11/08/2015 00:00:00 11/08/2015 23:59:59
7 rows selected.
答案 1 :(得分:0)
这是一个简单的PL / SQL版本。 TRUNC
获得期间的开始(在这种情况下,根据ISO的一周)。然后,您只需添加数字0到6即可获得一周中的所有日期:
declare
start_of_week date;
begin
start_of_week := trunc(sysdate, 'IW');
for i in 0..6 loop
dbms_output.put_line('Date: ' || (start_of_week + i));
end loop;
end;
/