您如何计算 SQL 服务器中的到期日期?

How do you calculate an expiration date in SQL Server?

我需要计算到期日期。应该很容易吧?好吧,我的 "lifespan" 是以年而不是天为单位的,为了让它更具挑战性,年的值可以是小数。这是我的开头:

set @ExpirationDate = DATEADD(year, @LifeSpanYears, @BeginDate)

问题是,DATEADD允许传入小数,但如果你阅读文档,小数被截断为整数。

如何计算带小数年份的到期日期?

这是我想出的答案:

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

注意:当我在做这件事时,我意识到不可能使用小数年作为生命周期来确定确切的到期日期。你怎么知道什么时候添加闰日?如果你真的想要确切的答案,你需要以天为单位的生命周期。

实际上,"lifespan in years" 可能是以月为单位的寿命。如果是这样,您可能会考虑:

return dateadd(month, round(@LIfeSpanYears * 12, 0), @BeginDate)

这处理了闰年的问题。然而,它的代价是只解决了几个月。