一、需求描述:
如果当前时间是[1号,15号),需要清理上月与本月数据;
如果当前时间是[15号,月底],需要清理本月数据;
因此,需要获取相应月份的数据。
二、准备数据
create table TEST
(
load_date VARCHAR2(8)
);
insert into TEST (load_date)
values ('20200131');
insert into TEST (load_date)
values ('20200229');
insert into TEST (load_date)
values ('20200331');
insert into TEST (load_date)
values ('20200430');
insert into TEST (load_date)
values ('20200531');
insert into TEST (load_date)
values ('20200630');
insert into TEST (load_date)
values ('20200731');
insert into TEST (load_date)
values ('20200831');
insert into TEST (load_date)
values ('20200930');
insert into TEST (load_date)
values ('20201031');
insert into TEST (load_date)
values ('20201130');
insert into TEST (load_date)
values ('20201231');
insert into TEST (load_date)
values ('20210131');
insert into TEST (load_date)
values ('20210228');
commit;
三、编码:
-- 不论当前日期是否小于14号 本月最后一天都必须取
TRUNC(SYSDATE,'MM')--本月第一天
ADD_MONTHS(TRUNC(SYSDATE,'MM'),1)-1--下个月第一天-1 等于本月最后一天
-- 条件:取本月最后一天和当前日期减去月末最后一天小于14天的数据
WHERE (SYSDATE- TO_DATE(LOAD_DATE,'YYYYMMDD')<= 14 OR LOAD_DATE = TO_CHAR(ADD_MONTHS(TRUNC(SYSDATE,'MM'),1)-1,'YYYYMMDD'))
SELECT
*
FROM
TEST
WHERE
((
TO_DATE( '20200113', 'YYYYMMDD' ) - TO_DATE( LOAD_DATE, 'YYYYMMDD' ) >= 1
AND TO_DATE( '20200113', 'YYYYMMDD' ) - TO_DATE( LOAD_DATE, 'YYYYMMDD' ) <= 14
)
OR LOAD_DATE = TO_CHAR( ADD_MONTHS( TRUNC( TO_DATE( '20200113', 'YYYYMMDD' ), 'MM' ), 1 ) - 1, 'YYYYMMDD' ));
网友评论