产生3年

问题描述 投票:1回答:3

捆绑生成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
sql oracle
3个回答
2
投票

将参数乘以12:

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

demo


1
投票

使用<= 36,这将产生到31-DEC-19

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

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

© www.soinside.com 2019 - 2024. All rights reserved.