Ta odpowiedź jest podobna do odpowiedzi Nicholasa, co nie jest niespodzianką, ponieważ potrzebujesz podzapytania z CONNECT BY
by stworzyć listę dat. Daty mogą być następnie liczone podczas sprawdzania dnia tygodnia. Różnica polega na tym, że pokazuje, jak uzyskać wartość liczby dni tygodnia w każdym wierszu wyników:
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
Liczba jest włącznie, co oznacza, że zawiera FromDate
i ThruDate
. To zapytanie zakłada, że daty nie mają składnika czasu; jeśli tak, będziesz musiał TRUNC
kolumny dat w podzapytaniu.