oracle计算一个日期加上指定工作日(排除周六周日和一系列节假日)时间
来源:互联网 发布:传世1.0源码 编辑:程序博客网 时间:2024/04/29 23:30
第一步:
创建一个表格holiday用于灵活存放节假日日期(周末除外),如果和周末日期重复,则无需添加到该表格中:
Sql代码
create table HOLIDAY (
ID VARCHAR2(45) not null,
HL_DATE DATE,
HL_DESC VARCHAR2(500),
REMARK VARCHAR2(500),
constraint PK_HOLIDAY primary key (ID)
); www.2cto.com
comment on table HOLIDAY is
'节假日日期表(不含周末)';
comment on column HOLIDAY.ID is
'节假日编号';
comment on column HOLIDAY.HL_DATE is
'节假日期';
comment on column HOLIDAY.HL_DESC is
'假日说明';
comment on column HOLIDAY.REMARK is
'备注';
第二步:写个函数用以获取两个日期之间的周末天数,如下:
Sql代码
create or replace function 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;
第三步:编写函数用以获取指定日期延迟特定工作日以后的具体日期,如下:
Sql代码
create or replace function 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 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;
第四步:实际应用,如下:
Sql代码
select getdeferdate(sysdate,5) deferdate from dual;
结果如下:
DEFERDATE
1 2012-9-4 16:12:53
0 0
- oracle计算一个日期加上指定工作日(排除周六周日和一系列节假日)时间
- oracle计算一个日期加上指定工作日(排除周六周日和一系列节假日)时间
- Java计算加上指定工作日数(排除周六周日和一系列节日)
- SQL 计算两日期之间的工作天数和过滤工作日(周六、周日)
- java计算两个日期之前的天数(工作日),排除节假日和周末
- Java模块 -- 计算工作日 (Excel导入法定假日至数据库 排除周六 周日 法定假日) Calendar
- java判断日期是否为工作日(排除节假日和调整周末上班)
- 如何判断一个日期是不是周六和周日
- 判断一个日期是否是周六、周日
- 两日期间的工作日分钟数(只排除了周六周日)
- 计算两个日期之间的工作日(去掉周末和节假日)
- 计算两个日期之间的工作日(去掉周末和节假日)
- java获取2018年指定日期为节假日还是工作日
- 计算工作中请假时间,不计算周六周日
- Project中设置周六周日为工作日
- 获取两个日期之间工作日天数,去除节假日和双休
- sql 查出两个时间段内所有的工作日时间[去除周六周日]
- 添加工作日,排除时间段内节假日
- iOS开发之常用六种手势
- Android init.rc文件详
- 常用插件介绍
- 每日一模块——MySQLdb,常用的数据库语句,数据库回滚
- jni编译问题:jin中添加LOG方法以及undefined reference to `__android_log_print'错误
- oracle计算一个日期加上指定工作日(排除周六周日和一系列节假日)时间
- iOS开发路线图
- 自定义tabBarItem,仍是使用系统的tabBar
- nginx反向代理配置
- 个人开发者app消息推送简单实现思路
- 使用PropertyPlaceholderConfigurer读取.properties文件(2)-处理加密属性
- 一桩善举挽救了两条人命
- 【Kaggle练习赛】之Digit Recognizer
- 屏蔽本层以下的层的touch消息