碰到一个需要按工作日向后计算天数的帖子,写了个算多少个工作日之后的日期函数。
IF OBJECT_ID('dbo.DateAddWorkdays') IS NOT NULL
DROP FUNCTION DateAddWorkdays
GO
-- 求 @date 之后的第 @workdays 个工作日
CREATE FUNCTION DateAddWorkdays(@workdays int, @date datetime)
RETURNS datetime
AS
BEGIN
-- 必须调用 SET DATEFIRST 1 保证休日判断的正确
IF @@DATEFIRST <> 1
RETURN NULL
DECLARE @weekday int
DECLARE @weeks int
DECLARE @days int
DECLARE @fulldays int
SET @weekday = DatePart(weekday, @date) -- 起始日星期几?
IF @weekday = 5 -- 周五多经过2个休日
SET @fulldays = 2
ELSE IF @weekday = 6 -- 周六多经过1个休日
SET @fulldays = 1
ELSE
SET @fulldays = 0 -- 其它:第二天就是工作日