PS,1880后程序員

          看不完的牙,寫不完的程序,跑不完的步。
          隨筆 - 97, 文章 - 34, 評(píng)論 - 10, 引用 - 0
          數(shù)據(jù)加載中……

          Oracle計(jì)算指定日期到月末的雙休日的天數(shù)

          業(yè)務(wù)邏輯:
          count=0;
          計(jì)算得到指定日期的下一個(gè)周日my_nextsunday
          計(jì)算得到月末my_lastdate
          IF 下一個(gè)周日<=月末 THEN
            周數(shù)=(月末-下一個(gè)周日的天數(shù))/7
            余數(shù)=(月末-下一個(gè)周日的天數(shù))%7
            IF 余數(shù)!=0 THEN count=1;
            count+=周數(shù)*2
            IF DAYOFWEEK(指定日期)=1 THEN count+=2;
            ELSE count+=1;
          ELSE
            計(jì)算 DAYOFWEEK(指定日期)-> DWS
            計(jì)算 DAYOFWEEK(月末)-> DWE
            IF DWS<=DME THEN --沒有跨周
              IF DWS=1 THEN count+=1;
              IF DWE=7 THEN count+=1;
            ELSE count=2;
          END IF;

          CREATE OR REPLACE FUNCTION WEEKENDDAY( IN_APP_DATE IN DATE)
          RETURN integer IS
              my_lastdate DATE;
              my_nextsunday DATE;
              my_weeks integer;
              my_n_diff integer;
              my_remain integer;
              my_dws integer;
              my_dwe integer;
              out_count integer :=0;
          BEGIN
             my_lastdate:=LAST_DAY(IN_APP_DATE);
             select NEXT_DAY(IN_APP_DATE,1) INTO my_nextsunday from dual;
             my_n_diff:=TRUNC( (  my_lastdate - my_nextsunday ), 0 )+1;
             if(my_nextsunday<=my_lastdate) THEN
               my_weeks:=FLOOR(my_n_diff/7);
               my_remain:=mod(my_n_diff,7);
               if my_remain>0 THEN 
                 out_count:=1; 
               END IF;    
               out_count:=out_count+my_weeks*2;
               IF to_number(to_char(IN_APP_DATE,'D'))=1 THEN 
                 out_count:=out_count+2;
               ELSE 
                 out_count:=out_count+1;
               END IF;   
             ELSE
               my_dws:=to_number(to_char(IN_APP_DATE,'D'));
               my_dwe:=to_number(to_char(my_lastdate,'D'));
               IF my_dws<=my_dwe THEN
                 IF my_dws=1 THEN 
                   out_count:=out_count+1;
                 END IF;    
                 IF my_dwe=7 THEN 
                   out_count:=out_count+1;
                 END IF;    
               ELSE
                 out_count:=2;
               END IF;  
             end if;
             return out_count;
          END WEEKENDDAY;

          posted on 2013-08-28 23:15 amenglai 閱讀(313) 評(píng)論(0)  編輯  收藏


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 平塘县| 蓝田县| 台江县| 乐平市| 宜黄县| 辽宁省| 平果县| 延吉市| 柞水县| 司法| 长治市| 吉林市| 祥云县| 军事| 乌恰县| 中阳县| 新绛县| 晋州市| 宁强县| 梅州市| 博爱县| 饶平县| 长葛市| 沂源县| 温州市| 寻甸| 商水县| 盐山县| 阳春市| 关岭| 丽水市| 蒲江县| 行唐县| 上高县| 华宁县| 甘德县| 融水| 专栏| 涞源县| 北京市| 阿克|