Diese Antwort ähnelt der von Nicholas, was keine Überraschung ist, da Sie eine Unterabfrage mit einem CONNECT BY
benötigen um eine Liste mit Daten zu spinnen. Die Daten können dann gezählt werden, während der Wochentag überprüft wird. Der Unterschied hier ist, dass es zeigt, wie man den Wochentag-Zählwert in jeder Zeile der Ergebnisse erhält:
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
Die Zählung ist inklusive, d. h. sie enthält FromDate
und ThruDate
. Diese Abfrage geht davon aus, dass Ihre Datumsangaben keine Zeitkomponente haben; Wenn dies der Fall ist, müssen Sie TRUNC
ausführen die Datumsspalten in der Unterabfrage.