попробуйте это:
SET DATEFIRST 1
DECLARE @StartDate datetime
,@EndDate datetime
SELECT @StartDate='6/21/2011'
,@EndDate='6/28/2011'
;with AllDates AS
(
SELECT @StartDate AS DateOf, datepart(weekday,getdate()) AS WeekDayNumber
UNION ALL
SELECT DateOf+1, datepart(weekday,DateOf+1)
FROM AllDates
WHERE DateOf<@EndDate
)
SELECT COUNT(*) AS WeekDayCount FROM AllDates WHERE WeekDayNumber<=5
ВЫХОД:
WeekDayCount
------------
6
(1 row(s) affected)
Если у вас есть праздничный стол, вы можете присоединиться к нему и удалить его.
РЕДАКТИРОВАТЬ на основе комментария @Ross Watson:
SET DATEFIRST 1
DECLARE @StartDate datetime
,@EndDate datetime
SELECT @StartDate='6/21/2011'
,@EndDate='6/28/2011'
;with AllDates AS
(
SELECT @StartDate AS DateOf, datepart(weekday,getdate()) AS WeekDayNumber
UNION ALL
SELECT DateOf+1, (WeekDayNumber+1) % 7
FROM AllDates
WHERE DateOf<@EndDate
)
SELECT COUNT(*) AS WeekDayCount FROM AllDates WHERE WeekDayNumber>0 AND WeekDayNumber<6
--I don't like using "BETWEEN", ">", ">=", "<", and "<=" are more explicit in defining end points
выдает тот же результат, что и исходный запрос.