Oracle 按工作日计算工单超期日期(跳过法定节假日)

一、创建辅助表:用于存储 法定节假日调休日

点击查看代码

create table TEMP_JJRTXR
(
  rq DATE not null,
  lx NUMBER not null,
  zt NUMBER not null
)
tablespace USR_xxx_TBS
  pctfree 10
  initrans 1
  maxtrans 255;
-- Add comments to the table 
comment on table TEMP_JJRTXR
  is '临时_节假日调休日';
-- Add comments to the columns 
comment on column TEMP_JJRTXR.rq
  is '日期';
comment on column TEMP_JJRTXR.lx
  is '类型:1=节假日,2=调休后补工作日';
comment on column TEMP_JJRTXR.zt
  is '状态:1=正常,0=废弃';
-- Create/Recreate indexes 
create unique index TEMP_JJRTXR_RQ on TEMP_JJRTXR (RQ)
  tablespace USR_HNMP_TBS
  pctfree 10
  initrans 2
  maxtrans 255
  nologging;

二、百度搜索节假日、调休日数据导入上表

三、创建辅助函数

点击查看代码
-- 辅助函数:判断是否是工作日:Y/N
CREATE OR REPLACE FUNCTION IS_WORK_DATE(  
       IN_RQ IN DATE 
)
RETURN VARCHAR2 AS 
T_IS_WORK_DATE VARCHAR2(10):='';

BEGIN
    SELECT CASE WHEN 
      (
         TO_CHAR(IN_RQ, 'D') NOT IN (7, 1)
         AND IN_RQ NOT IN (SELECT RQ FROM TEMP_JJRTXR WHERE LX=1 )  
      ) OR
      (
         TO_CHAR(IN_RQ, 'D') IN (7, 1)  
         AND IN_RQ IN (SELECT RQ FROM TEMP_JJRTXR WHERE LX=2 )
      ) THEN 'Y' ELSE 'N' END INTO T_IS_WORK_DATE FROM DUAL;       
    RETURN T_IS_WORK_DATE;
END;

-- 获取工单超时日期
CREATE OR REPLACE FUNCTION FUN_GET_OUT_DATE(
       IN_RQ IN DATE,
       IN_COUNT IN NUMBER
)
/*
辅助函数:
       按指定日期,跳过节假日,累加指定天数
       返回:超期日期
*/
RETURN DATE AS
T_OUT_DATE DATE:=IN_RQ;
T_IS_WORK_DATE VARCHAR2(10):='N';

BEGIN
    FOR I IN 1..IN_COUNT LOOP
        WHILE T_IS_WORK_DATE='N'  LOOP
            T_OUT_DATE := T_OUT_DATE + 1;
            SELECT IS_WORK_DATE(T_OUT_DATE) INTO T_IS_WORK_DATE FROM DUAL;
            /*IF T_IS_WORK_DATE='Y' THEN
              DBMS_OUTPUT.put_line(T_OUT_DATE);
              DBMS_OUTPUT.put_line(T_IS_WORK_DATE);
            END IF;*/
        END LOOP;
        T_IS_WORK_DATE:='N';
    END LOOP;
    
    RETURN T_OUT_DATE;
END;

四、根据工单创建日期与限制天天数,获取超期日期

SELECT FUN_GET_OUT_DATE(TO_DATE('2021-01-01','YYYY-MM-DD'),10) FROM DUAL;

posted @   合法勒索夫  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
点击右上角即可分享
微信分享提示