有起始日期及天数 ,按30天计算出最终日期

放飞阳光 2020-06-24 10:13:03
起始日期:2020-06-30 天数:45 最终日期:2020-08-15 。用语句 convert(varchar(10),DATEADD(day,45,'2020-06-30'),120)只能到2020-08-14,这样不准,求计算方法。
...全文
392 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
RINK_1 2020-06-26
  • 打赏
  • 举报
回复
你这个还是会有些问题,比如2020.02.29,加360天,但是2021年没有2月29的,那还是会和你的要求结果不一样。

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)))
唐诗三百首 2020-06-25
  • 打赏
  • 举报
回复

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 行受影响)
*/
放飞阳光 2020-06-25
  • 打赏
  • 举报
回复
每个月按30天,12个月就是360天。有31的也是算30天
唐诗三百首 2020-06-24
  • 打赏
  • 举报
回复
请问什么是"按30天计算"?

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧