ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 計算兩個日期間的工作日數量--Function

計算兩個日期間的工作日數量--Function

原创 Linux操作系统 作者:zaorv 时间:2019-04-03 17:57:06 0 删除 编辑

执行环境:ORACLE SQL 

不考虑节日。

Dear Jungle ,
 煩請 增加下面 自定義FUNCTION,并且分配用戶權限。
業務部要求 計算 兩個日期間的工作日(即周一至周五)數量。
Function 代碼如下:
CREATE OR REPLACE  FUNCTION APPS.SGDF_WORK_DAY( START_DATE IN DATE ,END_DATE IN DATE  )
  
 RETURN NUMBER IS DAY_COUNT NUMBER :=0 ;
 
BEGIN
 DECLARE V_DAY NUMBER :=0;
         V_START_DATE DATE ;
  BEGIN       
 IF START_DATE<=END_DATE THEN
     V_START_DATE:=START_DATE ;
     WHILE V_START_DATE <= END_DATE LOOP
        SELECT TO_CHAR(V_START_DATE,'D') INTO V_DAY FROM DUAL;
          IF (V_DAY!='1') AND (V_DAY!='7') THEN
           DAY_COUNT := DAY_COUNT +1 ;
          END IF ; 
        V_START_DATE :=V_START_DATE + 1 ;
     END LOOP;
      RETURN(DAY_COUNT);
  ELSE 
   V_START_DATE:=END_DATE ;
     WHILE V_START_DATE <= START_DATE LOOP
        SELECT TO_CHAR(V_START_DATE,'D') INTO V_DAY FROM DUAL;
          IF (V_DAY!='1') AND (V_DAY!='7') THEN
           DAY_COUNT := DAY_COUNT +1 ;
          END IF ; 
        V_START_DATE :=V_START_DATE + 1 ;
     END LOOP;             
      RETURN(-DAY_COUNT);   
 END IF;
 
   EXCEPTION
     WHEN NO_DATA_FOUND THEN
        RETURN '0';
 END; 
END  ; 

/* ORACLE PL/SQL 計算兩個日期 間 工作日 數量  */
 
 
******************** 下面測試例子代碼:***********************
/*, ATTRIBUTE16,ATTRIBUTE13 */
   select  ORDER_NUMBER
   ,to_date(SUBSTR(ATTRIBUTE13,1,11),'DD-MON-YYYY'),TO_DATE(SUBSTR(ATTRIBUTE16,1,10),'YYYY-MM-DD')
 , apps.SGDF_WORK_DAY(to_date(SUBSTR(ATTRIBUTE13,1,11),'DD-MON-YYYY'), TO_DATE(SUBSTR(ATTRIBUTE16,1,10),'YYYY-MM-DD'))  AS DAYCOUNT
-- , apps.SGDF_WORK_DAY( TO_DATE(SUBSTR(ATTRIBUTE16,1,10),'YYYY-MM-DD'),to_date(SUBSTR(ATTRIBUTE13,1,11),'DD-MON-YYYY'))  AS DAYCOUNT
   from  ont.oe_order_headers_all
    where ORDER_NUMBER LIKE '6010016__'
  

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/729024/viewspace-674265/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2018-09-12

  • 博文量
    192
  • 访问量
    206110