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 年なので、2016 年 6 月 30 日です。

2016 年だった場合、2017 年 6 月 30 日を使用する必要があります。2017 年があった場合、2018 年 6 月 30 日を使用する必要があります。.. ..

ご協力いただきありがとうございます。

編集ソリューション

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

366 日分の日付が必要な場合:

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

または、1 年分 (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 に答える
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 に答える