quote: Originally posted by setbasedisthetruepath A simple problem, really. You need a table containing all dates you wish to exclude, likely all weekends and holidays. Compute the straight DATEDIFF() and then subtract the # of rows from your exclusion table where the date falls in your date range. There's no "one size fits all" solution b/c everyone's definition of holiday is different (government vs. corporate vs. religious, etc).JonathanGaming will never be the same
That's what I get for going to lunch...CREATE TABLE WeekEndsAndHolidays (DayOfWeekDate datetime, DayName char(3))GOSET NOCOUNT ONDECLARE @FirstSat datetime, @x intSELECT @FirstSat = '1/3/2004', @x = 1 --Add WeekEndsWHILE @x < 52BEGIN INSERT INTO WeekEndsAndHolidays(DayOfWeekDate, DayName) SELECT DATEADD(ww,@x,@FirstSat), 'SAT' UNION ALL SELECT DATEADD(ww,@x,@FirstSat+1), 'SUN' SELECT @x = @x + 1ENDSET NOCOUNT OFFGOSELECT * FROM WeekEndsAndHolidays Order by DayOfWeekDateGO-- Add US HolidazeINSERT INTO WeekEndsAndHolidays(DayOfWeekDate, DayName)SELECT '1/1/2004', 'THU' UNION ALLSELECT '2/16/2004', 'MON' UNION ALLSELECT '5/31/2004', 'MON' UNION ALLSELECT '7/5/2004', 'MON' UNION ALLSELECT '9/6/2004', 'MON' UNION ALLSELECT '11/25/2004', 'THU' UNION ALLSELECT '11/26/2004', 'FRI' UNION ALLSELECT '12/24/2004', 'FRI' UNION ALLSELECT '12/31/2004', 'FRI'GOSELECT * FROM WeekEndsAndHolidays Order by DayOfWeekDateGO-- WeekDays in MayDECLARE @Start datetime, @End datetimeSELECT @Start = '5/1/2004', @End = '6/1/2004'SELECT DATEDIFF(dd,@Start,@End)- COUNT(*) AS WeekDays FROM WeekEndsAndHolidays WHERE DayOfWeekDate BETWEEN @Start AND @EndGO Brett8-) |