2012. 9. 12. 14:45
반응형

나름 골머리 썩혀가며 만들어 봤다.


CREATE OR REPLACE FUNCTION diff_sec_business (

   i_start_date   IN   DATE,

   i_end_date     IN   DATE

)

   RETURN NUMBER

IS

   start_date   DATE   := i_start_date;

   end_date     DATE   := i_end_date;

   curr_date    DATE   := i_start_date;

   holl_count   NUMBER := 0;

   diff_count   NUMBER := 0;

BEGIN

   -- 주말(토,일)의 횟수를 센다.

   IF end_date - start_date <= 0

   THEN

      RETURN (holl_count);

   ELSE

      LOOP

         curr_date := TO_DATE (curr_date + 1);

         EXIT WHEN curr_date > end_date;


         IF TO_CHAR (curr_date, 'D') = '1' OR TO_CHAR (curr_date, 'D') = '7'

         THEN

            holl_count := holl_count + 1;

         END IF;

      END LOOP;

   END IF;


   -- 마지막 날이 주말이면 마지막날의 시간은 무시한다.

   IF TO_CHAR (end_date, 'D') = '1' OR TO_CHAR (end_date, 'D') = '7'

   THEN

      end_date := TO_DATE (TO_CHAR (end_date, 'YYYYMMDD'), 'YYYYMMDD');

   END IF;


   -- 시작된 날이 주말이면 다음날의 00시부터 시작된다.

   IF TO_CHAR (start_date, 'D') = '1' OR TO_CHAR (start_date, 'D') = '7'

   THEN

      start_date :=

                   TO_DATE (TO_CHAR (start_date + 1, 'YYYYMMDD'), 'YYYYMMDD');

   END IF;


   -- 시간 차이 계산

   diff_count := end_date - start_date;

   -- 차이 시간에서 공휴일 제외

   diff_count := diff_count - holl_count;

   RETURN diff_count * 24 * 60 * 60;

END;

/



반응형
Posted by seongsland