产生3年

时间:2019-03-12 13:58:54

标签: sql oracle

试图生成3年以下数据

31-DEC-17
31-DEC-18
31-DEC-19

以下查询产生3个月。我如何将其转移到3年

select LAST_DAY(add_months(date '2017-01-01', level - 1)) as mth 
        from dual 
        connect by level <= 3

3 个答案:

答案 0 :(得分:2)

将参数乘以12:

select last_day(add_months(date '2017-01-01', (level - 1) * 12 )) as mth 
  from dual 
  connect by level <= 3

demo

答案 1 :(得分:1)

使用<= 36,它将生成到19年12月31日

    select LAST_DAY(add_months(date '2017-01-01', level - 1)) as mth 
        from dual 
        connect by level <= 36

答案 2 :(得分:0)

正如@APC所述,last_day功能取决于您的NLS日期设置。因此,您可能更喜欢将truncate函数截断为yyyy指定的单位,如下所示:

select add_months(trunc(date'2017-01-01','yyyy'), level * 12 ) - 1
       as "Last Days"
  from dual 
connect by level <= 3;

Last Days
----------
2017-12-31
2018-12-31
2019-12-31

Demo