この回答はNicholasの回答に似ていますが、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
する必要があります サブクエリの日付列。