22,210
社区成员
发帖
与我相关
我的任务
分享
DECLARE @DT DATE
DECLARE @DIFF INT
SET @DT='2020-02-28'
SET @DIFF=10
SELECT DATEADD(DAY,(DAY(@DT)+(@DIFF%30))%30-1,DATEADD(MONTH,(@DIFF/30)+(DAY(@DT)+(@DIFF%30))/30,DATEADD(DAY,-1*DAY(@DT)+1,@DT)))
create function dbo.dateadd2(@date date,@add int)
returns date
as
begin
declare @date2 date,@dt int
select @dt=(select count(1)
from master.dbo.spt_values
where type=N'P'
and number<=abs(@add)
and right(convert(varchar,dateadd(dd,number*iif(@add>=0,1,-1),@date),23),2)='31')
select @date2=dateadd(dd,@add+@dt*iif(@add>=0,1,-1),@date)
return @date2
end
select date2=dbo.dateadd2('2020-06-30',45)
/*
date2
----------
2020-08-15
(1 行受影响)
*/