Oracle sysdate灵活日期

时间:2015-09-02 09:03:01

标签: oracle sysdate

我发表了这个声明

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

3 个答案:

答案 0 :(得分:1)

是相同的代码,但使用to_char:

从sysdate获取年份
select to_date('30.06.'||(to_char(sysdate,'yyyy')+1),'dd.mm.yyyy') from dual;

答案 1 :(得分: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;

答案 2 :(得分:0)

以下是步骤:

  1. 使用Trunc()将sysdate截断为年份。
  2. 使用Add_Months()添加18个月。
  3. 减去一天。