1、创建一个表用于存储假期和调整的上班时间:holiday_of_china。
字段设计:日期(BDATE)、是否假期(HFLAG)、假期名称(NAME)
维护假期信息表,请求接口、手动维护都可以。主要是需标识出一年内的假期以及加班日,数据量一般就30至40条。hflag为true代表假期,false代表加班日。具体数据如下:
2、直接COPY代码:
--创建视图:VIEW_WORKDAYS
CREATE OR REPLACE VIEW VIEW_WORKDAYS AS
select cast(bdate as nvarchar2(10)) bdate
from(
SELECT to_char(TRUNC(SYSDATE, 'YYYY') + ROWNUM - 1,'YYYY-MM-DD') bdate
FROM DUAL
CONNECT BY ROWNUM <= ADD_MONTHS(TRUNC(SYSDATE, 'YYYY'), 12) - TRUNC(SYSDATE, 'YYYY')
)
--holiday_of_china为第一步骤创建的维护表,用于存储特殊日期
--排除假期及周末(hflag判断是否为假期)
where to_char(TO_DATE(bdate,'YYYY-MM-DD'),'D') not in (1,7)
and bdate not in (select bdate from holiday_of_china where hflag= 'True')
union all
--增加周六周末调整为上班的时间
select bdate
from holiday_of_china
where hflag= 'False'
order by bdate desc;
3、使用视图:
--查询整年的工作日
select bdate
from VIEW_WORKDAYS
效果(2020年国庆前后工作日):
2020-10-14 | 2020-10-30 |
2020-10-13 | 2020-10-29 |
2020-10-12 | 2020-10-28 |
2020-10-10 | 2020-10-27 |
2020-10-09 | 2020-10-26 |
2020-09-30 | 2020-10-23 |
2020-09-29 | 2020-10-22 |
2020-09-28 | 2020-10-21 |
2020-09-27 | 2020-10-20 |
2020-09-25 | 2020-10-19 |
2020-09-24 | 2020-10-16 |
2020-09-23 | 2020-10-15 |
4、最后:如果喜欢,欢迎点赞收藏以及转发。