添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

第一步:
创建一个表格holiday用于灵活存放节假日日期(周末除外),如果和周末日期重复,则无需添加到该表格中:
create table T_RENT_HOLIDAY (
ID VARCHAR2(45) not null,
HL_DATE DATE,
HL_DESC VARCHAR2(500),
REMARK VARCHAR2(500),
constraint PK_HOLIDAY primary key (ID)
);
comment on table T_RENT_HOLIDAY is
‘节假日日期表(不含周末)’;

comment on column T_RENT_HOLIDAY.ID is
‘节假日编号’;

comment on column T_RENT_HOLIDAY.HL_DATE is
‘节假日期’;

comment on column T_RENT_HOLIDAY.HL_DESC is
‘假日说明’;

comment on column T_RENT_HOLIDAY.REMARK is

‘备注’;

第二步:写个函数用以获取两个日期之间的周末天数,如下:
create or replace function func_rent_weekend_count(startdate date,enddate date)
return number
/ *返回两个时间段内的周末天数,开始日期不计算在内 /
is
weekend_num number:=0;
tempdate date;
begin
tempdate:=startdate+1;
while tempdate<=enddate loop
weekend_num:=weekend_num+(case when to_char(tempdate,’day’) in(‘星期六’,’星期日’) then 1 else 0 end);
tempdate:=tempdate+1;
end loop;
return weekend_num;
end;

第三步:编写函数用以获取指定日期延迟特定工作日以后的具体日期,如下:
create or replace function func_rent_getDeferDate(startdate date,deferDay number)
return date
/ *返回延期后的日期 /
is
enddate date :=startdate+deferDay;–延期后的日期
holiday_num number:=0;–节假日天数
weekend_num number:=0;–周末天数
nonework_num number :=0;–非工作日天数
begin

–获取周末天数
weekend_num:=weekend_count(startdate,enddate);
–获取节假日天数
select nvl(count(1),0) into holiday_num from T_RENT_HOLIDAY a where a.hl_date is not null and a.hl_date > startdate and a.hl_date <= enddate;

nonework_num:=weekend_num+holiday_num;
if nonework_num !=0 then
enddate :=getDeferDate(enddate,nonework_num);

end if;
return enddate;
end;

第四步:实际应用,如下:
select func_rent_getDeferDate(sysdate-1,5) deferdate from dual;

压缩包里有2个文件,用于 计算 两个 日期 相差的 工作日 天数( 排除 周末和法定 节假日 ): 1、excel表为2023年日历数据,并且备注 工作日 、周末,调休、 节假日 类型,可导入数据库。 2、SQL文件为2023年所有 日期 的插入SQL,并标注: 工作日 、法定 节假日 节假日 调休的上班日 、周末的类型。 3、已重新更正5月6日调休。 这个结果是oralce数据库根据 周六 周日 是休息日,周一至周五为 工作日 ,这个逻辑来判断的,如果要作为实际的 工作日 、休息日、 节假日 的判断,还应在这个基础上进行调整,这个SQL可以生成初始化 节假日 数据表格。MOD函数用来求两个数值相除后的余数,这里巧妙运用每天的星期数对6取余运算,只有1和7对6取余后结果为1,1和7正好代表 周日 周六 ,所以当结果为1表示‘休息日’,否则表示‘ 工作日 ’。判断2023-1-1到2023-12-31这一年的 时间 ,哪些属于 工作日 ,哪些属于休息日。 文章目录1 概述2 示例2.1 判断双休日2.2 判断 节假日 #mermaid-svg-RiNPbI034v08DBcc .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-RiNPbI034v08DBcc .label text{fill:#333}#mermaid-svg-RiNPbI034v08DBc create or replace function workday_between( i_startTime varchar2, //开始 时间 i_endTime varchar2 //结束 时间 return number v_real_startTime date; v_real_endTime date; v_number number... select rownum,nt_date,case when dd=7 then '星期日' else '星期六' end holiddate from( select to_date('2021-01-01','yyyy-mm-dd')+rownum nt_date,to_char(to_date('2021-01-01','yyyy-mm-dd')+rownum,'D') dd from dual connect by to_char(to_date('2021-01-01','yyyy-mm-. create or replace function get_workday(starTime in date,endTime in date) return numberisWeekends number;Holidays number;Workdays number;begin--统计开始到结束有几天周末select count(*) into Weekends from(SELECT TO_... 项目要求:需要 计算 两个 日期 之间的 工作日 天数,包含元旦、五一、十一等法定假日。 网上查询很多SQL函数,最终发现都不太理想,例如国庆放假可能会调休,周末也要上班。所以唯一的解决方案是建立一张 工作日 时间 表,通过这张表去判断当天是否属于 工作日 。 1、新建一张数据库表,【 工作日 】 上传到CSDN资源了,下载后倒入数据库就可以 https://download.csdn.net/download...