我试图在我的表格中插入每周日期,开始日期始终在星期五,结束日期始终在星期四。我使用此代码:
Date_ START | DATE_END
29-05-2015 | 31-05-2015
05-06-2015 | 11-05-2015
代码在同一个月工作了数周,但如果我有一个月的开始日期和下个月的结束日期,那么我的表中没有数据插入。 例如:
/etc/environment
而不是2015年5月31日,我应该有04-06-2015。
答案 0 :(得分:1)
我认为以下是您的目标:
with generator as (select date '2015-05-29' + (level - 1)*7 dt
from dual
connect by level <= (date '2016-01-21' - date '2015-05-29')/7 + 1)
select to_char(dt, 'YYYY "SEM"IW') "KEY",
dt "DATE_START",
dt + 6 "DATE_END"
from generator;
KEY DATE_START DATE_END
---------- ---------- ----------
2015 SEM22 2015-05-29 2015-06-04
2015 SEM23 2015-06-05 2015-06-11
2015 SEM24 2015-06-12 2015-06-18
2015 SEM25 2015-06-19 2015-06-25
<snip>
2016 SEM01 2016-01-08 2016-01-14
2016 SEM02 2016-01-15 2016-01-21
这假设您在生成器子查询中指定的日期已经确定为星期五。否则,您可以使用类似trunc(<date> - 4, 'iw') + 4
或trunc(<date> + 3, 'iw') + 4
的内容(取决于您是否希望在指定的日期包含上一个或下一个星期五)以确保种子日期绝对是星期五。
答案 1 :(得分:0)
也许只是替代方案,你可以在这里尝试分析功能。但是作为 Boniest建议&#34;只需添加几天&#34;将是更好的方法。有 有趣的
WITH generator AS
(SELECT DATE '2015-01-02' + LEVEL - 1 dt
FROM dual
CONNECT BY LEVEL <= DATE '2016-01-21' - DATE '2015-01-02' + 1
)
-- select * from generator;
SELECT TO_CHAR(dt, 'YYYY "SEM"IW') "KEY",
dt "DATE_START",
lead(dt) over (ORDER BY (dt)) -1 "End Date"
FROM generator
WHERE TO_CHAR(dt, 'D') = TO_CHAR(DATE '2015-01-02', 'D');
----------------------------------OUTPUT-----------------------------------------
**KEY DATE_START End Date**
2015 SEM18 05/01/2015 05/07/2015
2015 SEM19 05/08/2015 05/14/2015
2015 SEM20 05/15/2015 05/21/2015
2015 SEM21 05/22/2015 05/28/2015
2015 SEM22 05/29/2015 06/04/2015
----------------------------------------------------------------------------------