Oracle 的时间格式很多,最常见的格式类型就是 yyyymmdd 形式。当然如果遇到其他的时间类型就需要花点时间进行转换了。
今天说的是如何获取几个月前的时间日期
*表中存有yyyy-mm-dd varchar2 类型的 字段 data_dt
1、获取前一年的数据 (很少会有需求是查找前一年的数据)
select * from table a where substr(to_char(a.data_dt),1,4)= substr('20190101',1,4)-1 --ok
2、获取前 X 月的数据日期(常见)x=24
select add_months(to_date('20200909','yyyymmdd'),-24) from dual ;--获取到前24个月的日期是哪一天
select to_char(add_months(to_date('20200909','yyyymmdd'),-24),'yyyymmdd') from dual ;--得到yyyymmdd类型
select to_number( to_char(add_months(to_date('20200909','yyyymmdd'),-24),'yyyymmdd'),99999999) from dual --得到数字类型
-----------------------------------------------------------华丽分隔符-----------------------------------------------------------
获取本月第一天
select TO_CHAR(TRUNC(TO_DATE('20201111', 'YYYYMMDD'), 'MM'), 'YYYYMMDD') from dual;
获取本月最后一天
select to_char(last_day(sysdate),'yyyymmdd') from dual;
获取本月最后一个工作日
select
case when to_char(to_date('20201114','yyyymmdd'),'day')= '星期六' then to_date('20201114','yyyymmdd') -1
when to_char(to_date('20201114','yyyymmdd'),'day')= '星期日' then to_date('20201114','yyyymmdd') -2
else to_date('20201114','yyyymmdd') end
from dual;
获取上月月初日期 (当 -1 改为 0 的时候可以获取本月初日期)
SELECT TO_CHAR(ADD_MONTHS(trunc(TO_DATE(TO_CHAR(TRUNC(sysdate, 'mm'), 'yyyy-mm-dd'),'yyyy-mm-dd')),-1),'yyyy-mm-dd')
FROM dual;
获取上月月末日期 (当 -1 改为 0 的时候可以获取本月末日期)
SELECT TO_CHAR(last_day(ADD_MONTHS(trunc(TO_DATE(TO_CHAR(TRUNC(sysdate, 'mm'), 'yyyy-mm-dd'),'yyyy-mm-dd')),-1)),'yyyy-mm-dd')
FROM dual;