Oracle
獲得當年減去 5 年的最佳方法
實際上,我有下一個查詢,用於以這種格式“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