0

我把这个声明写出来了

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
4

3 回答 3

1

是您的相同代码,但使用 to_char 从 sysdate 获取年份:

select to_date('30.06.'||(to_char(sysdate,'yyyy')+1),'dd.mm.yyyy') from dual;
于 2015-09-02T09:07:31.367 回答
1

如果您想要 366 天的日期:

SELECT TRUNC( SYSDATE, 'YEAR' ) + INTERVAL '18' MONTH - LEVEL AS DATUM
FROM   DUAL
CONNECT BY LEVEL <= 366;

或者,如果您想要一年的日期(闰年 365 天或 366 天)日期(今年 7 月 1 日至明年 6 月 30 日):

SELECT TRUNC( SYSDATE, 'YEAR' ) + INTERVAL '18' MONTH - LEVEL AS DATUM
FROM   DUAL
CONNECT BY TRUNC( SYSDATE, 'YEAR' ) + INTERVAL '18' MONTH - LEVEL >= TRUNC( SYSDATE, 'YEAR' ) + INTERVAL '6' MONTH;
于 2015-09-02T10:25:15.680 回答
0

以下是步骤:

  1. 使用 Trunc() 将 sysdate 截断为年份。
  2. 使用 Add_Months() 添加 18 个月。
  3. 减去一天。
于 2015-09-02T09:06:02.033 回答