--*******************************************************************************
--功能说明: 以日期为准,往前推X天工作日的日期
--取ntl_ot_work_calendar表来确定该日期是否在表中存在:
--如果该记录在表中存在,判断是否为工作日;
--如果该记录在表中不存在,则默认为工作日
--参数说明:假设传入2012-09-10号,2天,得到日期为2012-09-06(7号,8号为休息日)
--调用函数:
--修改记录:
--******************************************************************************/
FUNCTION FUN_GET_DATE_BY_WORK_DAY(P_CHANGE_DATE IN DATE,
P_WORK_DAYS IN NUMBER)
RETURN NTL_OT_WORK_CALENDAR.DATE_CALENDAR%TYPE IS
V_CHANGE_DATE NTL_OT_WORK_CALENDAR.DATE_CALENDAR%TYPE;
FLAG_WORK_DAY BOOLEAN := TRUE;
V_FIND_RECORD NUMBER(2) := 0;
V_FIND_WORKDAY_RECORD NUMBER(2) := 0;
V_DAYS NUMBER(2) := -1;
V_LOGIC_DATE NTL_OT_WORK_CALENDAR.DATE_CALENDAR%TYPE;
BEGIN
IF (P_CHANGE_DATE IS NOT NULL) THEN
V_LOGIC_DATE := P_CHANGE_DATE;
ELSE
V_LOGIC_DATE := TRUNC(SYSDATE);
END IF;
WHILE FLAG_WORK_DAY LOOP
select COUNT(1)
INTO V_FIND_RECORD
from NTL_OT_WORK_CALENDAR T
WHERE TRUNC(T.DATE_CALENDAR) = TRUNC(V_LOGIC_DATE);
--说明该日期在日历设置表中存在
IF (V_FIND_RECORD <> 0) THEN
select COUNT(1)
INTO V_FIND_WORKDAY_RECORD
from NTL_OT_WORK_CALENDAR T
WHERE TRUNC(T.DATE_CALENDAR) = TRUNC(V_LOGIC_DATE)
AND T.IS_WORKDAY = '1';
--说明该日期为工作日
IF (V_FIND_WORKDAY_RECORD <> 0) THEN
V_CHANGE_DATE := TRUNC(V_LOGIC_DATE);
V_DAYS := V_DAYS + 1;
END IF;
ELSE
V_CHANGE_DATE := TRUNC(V_LOGIC_DATE);
V_DAYS := V_DAYS + 1;
END IF;
IF (V_DAYS = P_WORK_DAYS) THEN
FLAG_WORK_DAY := FALSE;
END IF;
V_LOGIC_DATE := V_LOGIC_DATE - 1;
END LOOP;
RETURN V_CHANGE_DATE;
EXCEPTION
WHEN OTHERS THEN
RETURN NULL;
END FUN_GET_DATE_BY_WORK_DAY;
分享到:
相关推荐
由于有平年 闰年,30天 31天 28天 29天 之分 所以 我谢了个方法 来拼日期输出的格式是 20130927 这样,查询的日期范围是45天内的 自己写了个类 分享给大家,可能有些逻辑有写笨拙,大家别喷,我写了一天半才 才这好...
可以获取得到工作的MAP,并可以指定日期为工作日,将工作日设为非工作日.
计算N个工作日后的日期
- 通过`ZongTian`方法计算每个日期距离某个参考点(通常是公元0年1月1日)的总天数,从而计算出两日期间的天数差。 ### 2. `DateType` 类的设计 #### 2.1 类的定义 ```java class DateType{ int y, m, d; ...
java计算整年工作日(包含特殊的工作日)排除法定节假日和周末能运行
2、Mysql 得到T+n个工作日日期(带自定义节假日、法定节假日) fGetWorkDay('2018-02-13', 5) ------------------------------ 2018-02-26 fGetWorkDay('2018-09-26', 5) ------------------------------ 2018-...
在Java编程中,有时我们需要处理与日期相关的任务,例如判断某个日期是否是节假日,或者计算几个工作日后的新日期。这个工具类就是为了解决这样的问题而设计的。它包含了一个功能丰富的API,允许开发者轻松地进行...
不需要编程,纯使用函数解决,根据开始日期和工作日,推算结束日期 1. 解决法定节假日 2. 解决调休等特殊日子 3. 需要每年维护一次“特殊日期”清单。
上述代码片段展示了如何在Java中处理日期相关的常见需求,包括求两日期之间的差值、判断日期合法性以及前推或后推日期。这些功能是通过自定义的`DateType`类实现的,其中包含了日期的封装、合法性检查以及日期运算的...
可以获取得到工作的MAP,并可以指定日期为工作日,将工作日设为非工作日. 之前提交的有问题
压缩包里有2个文件,用于计算两个日期相差的工作日天数(排除周末和法定节假日)...2、SQL文件为2023年所有日期的插入SQL,并标注:工作日、法定节假日、节假日调休的上班日 、周末的类型。 3、已重新更正5月6日调休。
- 接着,通过循环遍历起始日期与结束日期之间的每一天,并使用`DATEPART`函数确定每一天是否为工作日。 - `DATEPART(Weekday, @dt_begin)`获取当前日期是一周中的第几天(1表示周日,2表示周一,以此类推)。 - `...
1、excel表数据为2022年周末休息日和法定节假日数据,并且备注周末和节假日类型,可导入数据库,用于计算两个日期相差的工作日天数(排除周末和法定节假日)。 2、SQL文件为2022年所有日期,并标注:工作日、法定节...
本人编写,通过自己定义的函数计算两个日期之间周末的天数和工作日天数,经过测试,非常好用
这个函数会从输入的日期开始,逐天检查是否为工作日(不是周末且不在节假日表中)。如果是,则返回该日期;否则,继续增加日期直到找到下一个工作日。 然而,这个方法不考虑周末,所以我们需要修改一下逻辑,添加对...
2023年日期数据(区分周末、节假日、工作日).xls code字段状态: 工作日:0 法定节假日:1 休息日加班(法定节假日调休):2 休息日(日常休息日):3
2023年所有日期数据(区分周末、节假日、工作日) mysql 语句 insert 生成的节假日表 code字段状态: 工作日:0 法定节假日:1 休息日加班(法定节假日调休):2 休息日(日常休息日):3 mysql2023日期数据全部.sql
2023年所有日期数据(区分周末、节假日、工作日) mysql 语句 insert 生成的节假日表 code字段状态: 工作日:0 法定节假日:1 休息日加班(法定节假日调休):2 休息日(日常休息日):3 mysql2023日期数据全部.sql
//计算15个工作日之后的工作日日期 Date date = workdayUtils.getWorkday(new Date(), 15); //计算两个日期之间的工作日总数 int count = workdayUtils.getWorkdayCount(new Date(), format.parse("2013-08-13"));