Ok, I figured it out. I knew it had to be a reverse of Jeff's code, which can be found at
http://www.sqlservercentral.com/articles/Advanced+Querying/calculatingworkdays/1660/.
And it was. I had to read the article several times to really understand what was happening, but basically what I needed to do is this
IF OBJECT_ID('dbo.fnAddWorkdays','fn') IS NOT NULL
DROP FUNCTION dbo.fnAddWorkdays
GO
CREATE FUNCTION dbo.fnAddWorkdays (@Start DATETIME,@NumDays INT)
RETURNS DATETIME
AS
BEGIN
DECLARE @EndDate DATETIME
SELECT @EndDate =
DATEADD(d,@NumDays,@Start) + (DATEDIFF(wk,@Start,DATEADD(d,@NumDays,@Start))*2)
+(CASE WHEN DATENAME(dw,@Start) = 'Sunday' THEN 1 ELSE 0 END)
+(CASE WHEN DATENAME(dw,@Start) = 'Saturday' THEN 1 ELSE 0 END)
RETURN @Enddate
END
And I can test it against Jeff's code
SELECT dbo.fnAddWorkdays('1/1/2007',20) returns 1/27/2007. If I use 1/27/2007 as the end date I can run Jeff's code to get 20
DECLARE
@Start DATETIME,
@End DATETIME
SELECT @Start = '1/1/2007'
SELECT @End = '1/27/2007'
SELECT
(DATEDIFF(dd, @Start, @End) + 1)-(DATEDIFF(wk, @Start, @End) * 2)
-(CASE WHEN DATENAME(dw, @Start) = 'Sunday' THEN 1 ELSE 0 END)
-(CASE WHEN DATENAME(dw, @End) = 'Saturday' THEN 1 ELSE 0 END)
Thanks again Jeff. Just another example of how you continue to teach me without even knowing it.
Greg
_________________________________________________________________________________________________
The glass is at one half capacity: nothing more, nothing less.