Det här svaret liknar Nicholas, vilket inte är en överraskning eftersom du behöver en underfråga med en CONNECT BY
för att få fram en lista med datum. Datumen kan sedan räknas när man kontrollerar veckodagen. Skillnaden här är att den visar hur man får veckodagens räkningsvärde på varje rad av resultaten:
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
Antalet är inklusive, vilket innebär att det inkluderar FromDate
och ThruDate
. Den här frågan förutsätter att dina datum inte har en tidskomponent; om de gör det måste du TRUNC
datumkolumnerna i underfrågan.