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
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.
RépondreSupprimerSELECT
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;