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)
我想知道这种方式是否是最好的方式。
有不同的方法来实现目标。
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)