Този отговор е подобен на този на Никълъс, което не е изненада, защото имате нужда от подзаявка с CONNECT BY
за да изведете списък с дати. След това датите могат да бъдат преброени, докато се проверява денят от седмицата. Разликата тук е, че показва как да получите стойността на броя на делничните дни на всеки ред от резултатите:
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
Броят включва, което означава, че включва FromDate
и ThruDate
. Тази заявка предполага, че вашите дати нямат времеви компонент; ако го направят, ще трябва да TRUNC
колоните с дати в подзаявката.