[SQL] Retourner le nombre de week-end entre deux dates
Bonjour tout le monde,
Est-il possible de compter le nombre de week-end entre deux dates ?
Code:
select retourne_le_nombre_de_weekend from ma_table where ma_table.ma_date between to_date('02/01/2012','DD/MM/YYYY') and to_date('20/05/2012','DD/MM/YYYY')
Dans mon exemple ci-dessus retourne_le_nombre_de_weekend devrait retourner le chiffre 20.
Merci d'avance,
Yves
Nombre de Dimanche entre 2 dates
L'idée est de calculer le nombre de dimanche.
Il suffit alors de calculer le nombre de jours entre les 2 dates puis de divisé par 7. La partie entière donne le nombre de dimanche... à plus ou un près !
Pour affiner le résultat, il est important le prendre en compte le jour de la date de début. En effet, 3 jours entre lundi et mercredi = 0 dimanche, alors que 3 jours entre samedi et lundi = 1 dimanche !
Pour cela, il suffit de rajouter le numéro de jours de la semaine au nombre de jour entre les deux dates.
Soit : Ind_jour_debut = JOUR( Date_deb ) // doit retourné 1 pour Lundi et 7 Dimanche
Nb jour = (Date_fin - Date_Debut) + 1
Nb Dimanche = Partie_Entière( (( Nb_Jour + ( Ind_jour_debut - 1 )) / 7)
Le problème résiduel reste de calculer le numéro de jour de la semaine... quelque soit le NLS_LANGUAGE utilisé ! D’où ma super formule basé sur le format IW d'oracle permettant d'avoir la date du LUNDI de la semaine courante, quelque soit le paramétrage du poste exécutant le code !
Code:
1 2 3 4 5 6 7
| CREATE OR REPLACE FUNCTION NB_DIMANCHE(DATE_DEB IN DATE, DATE_FIN IN DATE) RETURN NUMBER IS
wk_Indice NUMBER;
BEGIN
wk_Indice := Trunc(DATE_DEB) - Trunc(DATE_DEB,'IW') + 1; -- 1=Lundi...7=dimanche
RETURN trunc(((Trunc(DATE_FIN) - Trunc(DATE_DEB)) + wk_Indice) / 7);
END;
/ |
PS : pour calculer le nombre de Samedi, il suffit de s'arranger pour wk_indice donne 1 le dimanche et 7 le samedi !