22,206
社区成员
发帖
与我相关
我的任务
分享
CREATE FUNCTION My_fun(@day INT ,@date DATE)
RETURNS DATE
AS
BEGIN
DECLARE @dt DATE,@num INT,@dw INT
--计算减去的天数有多少个周末,一个星期按五天计算
SELECT @num=abs(@day/5)
--得到实际应该减去的天数
SELECT @day=@day-@num*2
--得到减去相应天数后的日期
SELECT @dt=DATEADD(d,@day,@date)
--判断减去后的日期是否是周六日,如果是再减去两天
SELECT @dw=DATEPART(dw,@dt)
IF(@dw=1 OR @dw=7)
BEGIN
SELECT @dt=DATEADD(d,-2,@dt)
END
RETURN @dt
END
SELECT dbo.my_fun(-2,'2017-09-18')
----------
2017-09-14
SELECT dbo.my_fun(-30,'2017-09-18')
----------
2017-08-07
SELECT dbo.my_fun(-5,'2017-09-18')
----------
2017-09-11
这样应该可以,你试试看SET DATEFIRST 1;
DECLARE @date DATETIME
SET @date='2017-09-24'
SELECT CASE WHEN DATEPART(dw, @date) = 6 THEN DATEADD(dd, 2, @date)
WHEN DATEPART(dw, @date) = 7 THEN DATEADD(dd, 1, @date)
ELSE @date END
试试