计算工作日剩余天数

news/2024/11/29 13:52:57/

CREATE OR REPLACE FUNCTION “F_TEST6”
(
acceptTime in varchar2,
promiseDay in varchar2
)
return number
is
–返回值
return_num number;

totleTime number;
totleYGMDays number;
totleFjDays number;
totleJBDays number;
currentDay char(1);
calcDate date;

begin
return_num :=0;
totleTime :=0;
totleYGMDays :=0;
totleFjDays :=0;
totleJBDays :=0;

–*** 函数说明:传入的受理日期acceptTime,没有考虑节假日里生成的受理日期 ***–

–用于计算的日期变量
select to_date(acceptTime,‘yyyy-mm-dd’) into calcDate from dual ;

–1、计算已走过自然日总天数=当前时间-受理时间+1
select to_number((to_date(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’) - to_date(acceptTime,‘yyyy-mm-dd’) + 1)) into totleTime from dual;

–2、计算所有已走过的周末天数总数(不包括放假里的周末时间)
loop
–dbms_output.put_line('calcDate: ’ || calcDate);
exit when calcDate > to_date(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’);
select case when count(1)>0 then ‘8’ else to_char(calcDate,‘D’) end into currentDay from TB_JIAQU_DATE w where w.status = ‘1’ and w.type = ‘1’
and calcDate >= to_date(w.start_time,‘yyyy-mm-dd’) and calcDate <= to_date(w.end_time,‘yyyy-mm-dd’);
if (currentDay in(‘1’,‘7’)) then
totleYGMDays := totleYGMDays +1;
end if;
calcDate := calcDate + 1;
end loop;

–3、计算所有放假时间:受理时间到当前日期的所有放假时间 (情况1 当前时间在start_time之后且end_time之前,情况2 当前时间在end_time之后)
select sum(calcFJDays) into totleFjDays from (
select
(to_number(
case
when to_date(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’) <= to_date(w.end_time,‘yyyy-mm-dd’)
then to_date(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’)
else to_date(w.end_time,‘yyyy-MM-dd’)
end
- to_date(w.start_time,‘yyyy-MM-dd’)) + 1) as calcFJDays
from TB_JIAQU_DATE w
where w.status = ‘1’ and type = ‘1’
and to_date(acceptTime,‘yyyy-mm-dd’)<= to_date(w.start_time,‘yyyy-mm-dd’)
and (to_date(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’)>= to_date(w.end_time,‘yyyy-mm-dd’)
or (to_date(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’)>= to_date(w.start_time,‘yyyy-mm-dd’) and to_date(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’)<= to_date(w.end_time,‘yyyy-mm-dd’)))
);

–4、计算所有加班时间:受理时间到当前日期的所有加班时间 (情况1 当前时间在start_time之后且end_time之前,情况2 当前时间在end_time之后)
select sum(calcJBDays) into totleJBDays from (
select
(to_number(
case
when to_date(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’) <= to_date(w.end_time,‘yyyy-mm-dd’)
then to_date(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’)
else to_date(w.end_time,‘yyyy-MM-dd’)
end
- to_date(w.start_time,‘yyyy-MM-dd’)) + 1) as calcJBDays
from TB_JIAQU_DATE w
where w.status = ‘1’ and type = ‘2’
and to_date(acceptTime,‘yyyy-mm-dd’)<= to_date(w.start_time,‘yyyy-mm-dd’)
and (to_date(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’)>= to_date(w.end_time,‘yyyy-mm-dd’)
or (to_date(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’)>= to_date(w.start_time,‘yyyy-mm-dd’) and to_date(to_char(sysdate,‘yyyy-mm-dd’),‘yyyy-mm-dd’)<= to_date(w.end_time,‘yyyy-mm-dd’)))
);

–5、计算剩余工作日 = 承诺时间 - (所有自然日 - 放假总天数 - 周末总天数 + 加班总天数)
return_num := nvl(to_number(promiseDay),0) - (nvl(totleTime,0) - nvl(totleFjDays,0) - nvl(totleYGMDays,0) + nvl(totleJBDays,0));

–dbms_output.put_line(‘系统日期:’ || sysdate||’ ,受理日期:’||acceptTime || ’ ,所有自然日:’ || nvl(totleTime,0) || ’ ,周末总天数:’ || nvl(totleYGMDays,0) || ’ ,放假总天数:’ || nvl(totleFjDays,0) || ’ ,加班总天数:’ || nvl(totleJBDays,0) || ’ ,承诺天数:’ || nvl(to_number(promiseDay),0) || ’ ,剩余工作日:’ || nvl(return_num,0));

return return_num;
end;


http://www.ppmy.cn/news/676215.html

相关文章

php工作日,计算工作日的天数

经过几个小时的编程&#xff0c;测试&#xff0c;终于把这个看起来比较复杂的算法搞清楚了。有一个需求是需要计算两个时间段内的工作日(周一到周五)的天数。当然不包括国家规定的假期。 无 ?phpfunction calcDays($start_date,$end_date){$start_time strtotime($start_date…

每年工作日与非工作日的设置

public string GetYear(int year) { if (year 0) { year DateTime.Now.Year; //获取当前年份 } DataTable dt SQLHelper.GetDBToDataTable("select convert(varchar(10),NoWorkDate,120) as NoWorkDate from LVS_CORE_NoWorkDay where YearTime&quo…

python获取工作日_Python的上一个工作日

只需从给定日期减去一天,然后检查日期是否为平日.如果没有,减去另一个,直到你有一个工作日&#xff1a; from datetime import date, timedelta def prev_weekday(adate): adate - timedelta(days1) while adate.weekday() > 4: # Mon-Fri are 0-4 adate - timedelta(days1)…

计算两个日期之间的工作日(去掉周末和节假日)

一个贴吧上找到的&#xff0c;整理一下 package com.uphone.commons;import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.Iterator; import java.util.L…

计算工作日和自然日

用Java写一个倒计时程序&#xff0c;比如输入一个日期&#xff0c;格式为20090501&#xff0c;可以计算从当前日期开始到20090501有多少个工作日和多少个自然日 import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; i…

python判断是工作日还是休息日

一、概述 最近在做数据分析&#xff0c;需要判断一个日期是否为工作日&#xff0c;节假日。 找到一个现成的插件&#xff0c;蛮好用的。 1.1、插件介绍 chinesecalendar PyPI 判断某年某月某一天是不是工作日/节假日。 1.2、安装 pip install chinese_calendar该模块常…

oracle获取多少个工作日后的下一个工作日

维护如图所示 依赖表 -- Create table create table TIMERECORD (jjr_id VARCHAR2(36) not null,jjr_time DATE not null,jjr_state NUMBER(2) default 0,jjr_remark VARCHAR2(200),jjr_creattime TIMESTAMP(6) default sysdate not null,jjr_creat…

php验证一个日期是否是工作日,如何判断一个日期是节假日还是工作日

最近的一个微信多客服项目需要判断当前的日期是节假日还是工作日&#xff0c;中国的节假日有点复杂&#xff0c;比如端午中秋这些假期是农历&#xff0c;而十一长假又会有补休&#xff0c;所以很难去简单的去判断&#xff0c;还好最近找到百度 APIStore 的一个 API 可以简单的判…