I would like to build an SQL query which calculates the difference between 2 dates, without counting the week-end days in the result.
Is there any way to format the
I've updated @JOpuckman's function to take into account that different regions don't always have a weekend of Saturday and Sunday. Here's the code in case anyone else needs to apply this globally;
DECLARE @FirstDate DateTime
DECLARE @SecondDate DateTime
SET @FirstDate = '08-20-2012'
SET @SecondDate = '08-24-2012'
DECLARE @range INT;
DECLARE @WeekendDayNameStart VARCHAR(50)
DECLARE @WeekendDayNameEnd VARCHAR(50)
SET @WeekendDayNameStart = 'FRIDAY'
SET @WeekendDayNameEnd = (
SELECT CASE @WeekendDayNameStart
WHEN 'SUNDAY' THEN 'MONDAY'
WHEN 'MONDAY' THEN 'TUESDAY'
WHEN 'TUESDAY' THEN 'WEDNESDAY'
WHEN 'WEDNESDAY' THEN 'THURSDAY'
WHEN 'THURSDAY' THEN 'FRIDAY'
WHEN 'FRIDAY' THEN 'SATURDAY'
WHEN 'SATURDAY' THEN 'SUNDAY'
END
)
DECLARE @NumWorkDays INT
SET @range = DATEDIFF(DAY, @FirstDate, @SecondDate);
SET @NumWorkDays = (
SELECT
@range / 7 * 5 + @range % 7 - (
SELECT COUNT(*)
FROM (
SELECT 1 AS d
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
) weekdays
WHERE d <= @range % 7
AND DATENAME(WEEKDAY, @SecondDate - d) IN (@WeekendDayNameStart, @WeekendDayNameEnd))
);
-- Calculate whether the current date is a working day
DECLARE @CurDateExtra INT
SET @CurDateExtra =
(
CASE DATENAME(WEEKDAY, @SecondDate)
WHEN @WeekendDayNameStart THEN 0
WHEN @WeekendDayNameEnd THEN 0
ELSE 1
END
)
SET @NumWorkDays = @NumWorkDays + @CurDateExtra
SELECT @NumWorkDays