获得当前年份减去 5 年的最佳方法

csu*_*azo 2 oracle oracle-11g-r2 oracle-11g date

我实际上有下一个查询,我用它以这种格式“YYYYMM”获取当前年份减去 1 月份的 5 年。

select TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE,'YEAR'),12*5*-1),'YYYYMM') from dual;
Run Code Online (Sandbox Code Playgroud)

我想知道这种方式是否是最好的方式。

ato*_*pas 7

有不同的方法来实现目标。

SQL> select to_char(trunc(add_months(sysdate,-12*5),'YEAR'),'YYYYMM') from dual;
Run Code Online (Sandbox Code Playgroud)

或者

SQL>  select to_char(trunc(SYSDATE - interval '5' year,'YEAR'),'YYYYMM') from dual;
Run Code Online (Sandbox Code Playgroud)

关于第二个,如果提供的 SYSDATE 或当前日期恰好是闰日会发生什么?

SQL> select to_char(trunc(to_Date('2016-02-29','YYYY-MM-DD') - interval '5' year,'YEAR'),'YYYYMM') 
    from dual;
select to_char(trunc(to_Date('2016-02-29','YYYY-MM-DD') - interval '5' year,'YEAR'),'YYYYMM') 
from dual
                                                        *
ERROR at line 1:
ORA-01839: date not valid for month specified
Run Code Online (Sandbox Code Playgroud)

如果我们使用第一种方法会发生什么?

SQL> select to_char(trunc(add_months(to_Date('2016-02-29','YYYY-MM-DD'),-12*5),'YEAR'),'YYYYMM') 
     from dual;

TO_CHA
------
201101
Run Code Online (Sandbox Code Playgroud)