Cette réponse est similaire à celle de Nicholas, ce qui n'est pas une surprise car vous avez besoin d'une sous-requête avec un CONNECT BY
pour faire tourner une liste de dates. Les dates peuvent alors être comptées tout en vérifiant le jour de la semaine. La différence ici est qu'il montre comment obtenir la valeur du nombre de jours de la semaine sur chaque ligne des résultats :
SELECT
FromDate,
ThruDate,
(SELECT COUNT(*)
FROM DUAL
WHERE TO_CHAR(FromDate + LEVEL - 1, 'DY') NOT IN ('SAT', 'SUN')
CONNECT BY LEVEL <= ThruDate - FromDate + 1
) AS Weekday_Count
FROM myTable
Le décompte est inclusif, ce qui signifie qu'il inclut FromDate
et ThruDate
. Cette requête suppose que vos dates n'ont pas de composant temporel ; si c'est le cas, vous devrez TRUNC
les colonnes de date dans la sous-requête.