Oracle

獲得當年減去 5 年的最佳方法

  • March 25, 2021

實際上,我有下一個查詢,用於以這種格式“YYYYMM”獲取目前年份減去 1 月份的 5 年。

select TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE,'YEAR'),12*5*-1),'YYYYMM') from dual;

我想知道這種方式是否是最好的方法。

有不同的方法來實現目標。

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

或者

SQL>  select to_char(trunc(SYSDATE - interval '5' year,'YEAR'),'YYYYMM') from dual;

關於第二個,如果提供的 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

如果我們使用第一種方法會發生什麼?

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

TO_CHA
------
201101

引用自:https://dba.stackexchange.com/questions/191197