我需要计算到期日期。应该很轻松吧?好吧,我的“寿命”是几年而不是几天,并且为了使它更具挑战性,年份价值可以是分数。以下是我的开始:
set @ExpirationDate = DATEADD(year, @LifeSpanYears, @BeginDate)
问题是,DATEADD允许传入小数,但如果您阅读文档,则小数将被截断为int。
如何计算分数年的到期日期?
答案 0 :(得分:3)
这是我提出的答案:
create function Reporting.CalcExpirationDate ( @LifeSpanYears decimal(9,2), @BeginDate date)
returns date
begin
return DATEADD(day, (@LifeSpanYears * 365.25), @BeginDate)
end
然后像这样使用它:
select Reporting.CalcExpirationDate (13 , '2015-09-01') as CalculatedDate, '2028-09-01' as ExpectedDate
union all select Reporting.CalcExpirationDate (13.5 , '2015-09-01') as CalculatedDate, '2029-03-01' as ExpectedDate
注意:当我正在研究这个时,我意识到使用分数年作为生命周期是不可能确定确切的到期日期。你怎么知道何时增加闰日?如果你真的想要确切的答案,你需要几天的生命。
答案 1 :(得分:1)
在实践中,"生命周期多年"可能是几个月的寿命。如果是这样,您可以考虑:
return dateadd(month, round(@LIfeSpanYears * 12, 0), @BeginDate)
这可以处理闰年的问题。然而,它的代价是只能解决几个月。