when (@@Datefirst + datepart(weekday,@Date)) % 7 = 0 -- saturday then dateadd(day,2,@Date) else dateadd(day,1,@Date) end end
go
create function udf_PreviousWorkDate(@Date datetime) returns datetime -- 返回 @Date 的上一个工作日 begin /* declare @i int set @i = 3 declare @Date datetime set @Date = '2005-01-02' -- */ return case when (@@Datefirst + datepart(weekday,@Date)) % 7 = 2 -- Monday then dateadd(day,-3,@Date) when (@@Datefirst + datepart(weekday,@Date)) % 7 = 1 -- Sunday then dateadd(day,-2,@Date) else dateadd(day,-1,@Date) end end
go
create function udf_WorkDateAdd(@i integer,@Date datetime) returns datetime -- 返回 @Date 加上一段 @i 个工作日的新值 begin declare @ int set @ = 0 while @ < abs(@i) begin set @Date = case when @i >= 0 then --dbo.udf_nextworkdate(@Date) case when (@@Datefirst + datepart(weekday,@Date)) % 7 = 6 -- Friday then dateadd(day,3,@Date) when (@@Datefirst + datepart(weekday,@Date)) % 7 = 0 -- saturday