1 octobre 2012

Calculer le nombre de jours (hors WE) dans l'année

Ci joint une fonction DB2 trouvée sur le forum de http://www.tek-tips.com. Elle vous permet de calculer le nombre de jours ouvrables (lundi, mardi ... vendredi - sans considération de jours fériés) entre deux dates.

exemple : script DDL PSBBGJ_BUSINESSDAYS.sql

CREATE FUNCTION business_days (low_date DATE, high_date DATE)
RETURNS INTEGER
BEGIN ATOMIC
   DECLARE bus_days INTEGER DEFAULT 0;
   DECLARE cur_date DATE;
   SET cur_date = low_date;
   WHILE cur_date < high_date DO
      IF DAYOFWEEK(cur_date) IN (2,3,4,5,6) THEN
         SET bus_days = bus_days + 1;
      END IF;
      SET cur_date = cur_date + 1 DAY;
   END WHILE;
   RETURN bus_days;
END!

COMMIT!

création de la fonction :
cat PSBBGJ_BUSINESSDAYS.sql | db2 -vtd\!

utilisation de la fonction :
select HR.business_days(DATE ('2012-01-01'),DATE ('2013-01-01')) from sysibm.sysdummy1
-----------
        261

1 commentaire:

  1. Voici la version pour oracle dans un seul query, sans fonction. Il faut notter que le premiere jour de la semaine (numero 1) est dependent de NLS_TERRITORY.

    SELECT
    COUNT(
    CASE
    WHEN TO_CHAR(M.DATE_COL,'D') IN (6,7)
    THEN NULL
    ELSE 1
    END)
    FROM
    (
    SELECT
    L.LEAVE_START + ROWNUM-1 DATE_COL
    FROM
    ALL_OBJECTS,
    (
    SELECT
    to_date('2012-12-31','yyyy-mm-dd') LEAVE_END,
    to_date('2012-01-01','yyyy-mm-dd') LEAVE_START
    FROM
    dual
    )
    L
    WHERE
    ROWNUM <= L.LEAVE_END - L.LEAVE_START+1
    )
    M;

    RépondreSupprimer