第一步:

创建一个表格holiday用于灵活存放节假日日期(周末除外),如果和周末日期重复,则无需添加到该表格中:

-- Create table

create table HOLIDAY

(

id      VARCHAR2(45) not null,

hl_date DATE,

hl_desc VARCHAR2(500),

remark  VARCHAR2(500)

)

tablespace AHDATA

pctfree 10

initrans 1

maxtrans 255

storage

(

initial 64K

next 8K

minextents 1

maxextents unlimited

);

-- Add comments to the table

comment on table HOLIDAY

is '节假日日期表(不含周末)';

-- Add comments to the columns

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 '备注';

-- Create/Recreate primary, unique and foreign key constraints

alter table HOLIDAY

add constraint PK_HOLIDAY_ID primary key (ID)

using index

tablespace AHDATA

pctfree 10

initrans 2

maxtrans 255

storage

(

initial 64K

next 1M

minextents 1

maxextents unlimited

);

第二步:写个函数用以获取两个日期之间的周末天数,如下:

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;

第三步:编写函数用以获取指定日期延迟特定工作日以后的具体日期,如下:

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;

第四步:实际应用,如下:

select getdeferdate(sysdate, 1) from dual;

Oracle 计算日期规避节假日相关推荐

  1. 关于Oracle计算日期间隔天数

    最近要计算日期间隔天数,测试发现几个问题,刚开始搜网友的,有些不太靠谱. 1.首先日期不能相加. 2.如果要相减,最好去掉时分秒,格式化成年月日,直接相减的话得到的是小数,日期相减底层应该是操作的毫秒 ...

  2. oracle计算日期倒计时,时间倒算回去到了哪里?│机械倒数计时码表

    Laura Lan蓝思晴  <大寫的蘿菈>主笔 华语圈知名钟表珠宝评论家,专精机械钟表赏析,亦对珠宝.生活.文化与艺术等各领域皆有着独到的见解.创办<引想力工作室>从事专业文案 ...

  3. oracle 计算日期季度,Oracle日期查询:季度、月份、星期等时间信息

    Select to_char(sysdate,'Q') from dual;--指定日期的季度 Select to_char(sysdate,'MM') from dual;--月份 Select t ...

  4. cursor is oracle 日期_Oracle时间计算------日期格式参数含义说明

    Oracle时间计算------日期格式参数含义说明 D 一周中的星期几 DAY 天的名字,使用空格填充到9个字符 DD 月中的第几天 DDD 年中的第几天 DY 天的简写名 IW ISO标准的年中的 ...

  5. IT忍者神龟之oracle常用日期计算

    oracle 常用日期计算2007年10月31日 星期三 下午 08:51sysdate 为数据库服务器的当前系统时间. to_char 是将日期型转为字符型的函数. to_date 是将字符型转为日 ...

  6. Oracle 计算两日期间隔月数

    Oracle 计算两日期之间月数 实际应用中,有时候会计算两日期间隔天数.月数.如直接相减,可能会出问题,如: select 202110-202106 from dual; 结果为:4 看似正确,但 ...

  7. MySQL排除节假日,计算日期差

    需求 计算两个日期的差,并且需要排除节假日. 首先,我们需要准备一张节假日表,存放一年里所有的周末和法定节假日. 实现下面两个需求: 1.通过主表的两个日期字段,去计算这两个字段的日期差值: 2.传入 ...

  8. Oracle 计算两个日期之间的年月、日期,月份数、天数

    目录 Oracle 计算两个日期之间的月份数.月份列表.天数.日期列表 Oracle 计算两个日期之间的月份数.月份列表.天数.日期列表 获取日期之间的月数(包括自身) 时间:2019-05-30 至 ...

  9. oracle俩个日期的差,oracle计算两个日期的时间差时分秒

    Oracle函数可以实现诸多的功能,下面就介绍使用oracle函数计算时间差的实现方法. 两个Date类型字段:START_DATE,END_DATE,计算这两个日期的时间差(分别以天,小时,分钟,秒 ...

最新文章

  1. 哈佛最受学生欢迎的CS50课程来啦!「撕书教授」在家录了一套4K网课
  2. create-react-app支持antd按需导入
  3. 让乔布斯立足肩上的C语言之父
  4. STL容器之deque
  5. leetcode No.141 环形链表
  6. 群聊金山云与英特尔的“AI as a Service”,你都get到了什么?
  7. 杭电oj 1002 c++版本
  8. 计算机基础与应用2,计算机基础与应用(作业2)
  9. 复用类库内部已有功能
  10. android Fragment详解三:实现Fragment的界面
  11. jdk1.8下载安装
  12. vb.net 教程 11-1 打印组件 5 PrintPreviewDialog
  13. 庆祝:黑客x档案官方二级域名转向
  14. 来料不良,只是采购一人的事吗?
  15. 交通流预测爬坑记(三):使用pytorch实现LSTM预测交通流
  16. 20210107WEB渗透学习之信息收集
  17. docker安装后,并没有ln到/etc/systemd/system/multi-user.target.wants
  18. unable to close due to unfinalized statements or unfinished backups
  19. Markdown懒办法排版微信公众号文章
  20. Win7环境安装Anaconda

热门文章

  1. 织梦模板安装后出现中文乱码?
  2. python股票全套系统_用python来炒股三 炒股交易系统(法则)
  3. Ubuntu 下PupBot 搭建QQ机器人
  4. 《C++ Concurrency in Action》笔记28 无锁并行数据结构
  5. 安卓App太能乱来了!被曝一天扫你后台1.3万次:小米系统更新,一不小心扯出惊人真相...
  6. 语音识别技术基础理解
  7. android 语音唤醒,录音并识别
  8. 飞上天和太阳肩并肩中国人这项太阳能开发技术牛大发了
  9. docker默认ip地址修改
  10. 量化选股策略搭建(一)(股票数据获取)