【发布时间】:2015-09-02 09:03:01
【问题描述】:
我把这句话写出来了
SELECT to_date('30.06.2016', 'dd.mm.yyyy') - (LEVEL-1) DATUM
FROM DUAL
CONNECT BY LEVEL <= 366;
这给了我从30.06.2016 到过去 366 天的所有日期。
到目前为止一切顺利。
我需要补充的是to_date('30.06.2016')更灵活..
我的意思是我总是希望它使用 sysdate + 1 年中 6 月的最后一天。
在这种情况下,我们现在有 2015 - 所以我们有 30.06.2016。
如果我们有 2016 年,我需要它来使用 30.06.2017。 如果我们有 2017 年,我需要它来使用 30.06.2018。 .. ..
感谢您的帮助。
编辑解决方案:
SELECT last_day(add_months(to_date('01.06.' || to_char(sysdate, 'YYYY'), 'dd.mm.yyyy'),12)) - (LEVEL-1) DATUM
FROM DUAL
CONNECT BY LEVEL <= 366
【问题讨论】:
-
连接 '30.06.'与年。您可以通过格式化 sysdate + 365 来获取年份。
-
我更正了 - 谢谢马
-
为了正确处理闰年,您应该使用
CONNECT BY to_date('30.06.2016', 'dd.mm.yyyy') - (LEVEL-1) <= ADD_MONTHS(to_date('30.06.2016', 'dd.mm.yyyy'), -12)而不是CONNECT BY LEVEL <= 366; -
您的问题不是放置解决方案的地方。