如何计算SQL Server中的到期日期?

时间:2016-01-08 13:17:55

标签: sql-server sql-server-2014

我需要计算到期日期。应该很轻松吧?好吧,我的“寿命”是几年而不是几天,并且为了使它更具挑战性,年份价值可以是分数。以下是我的开始:

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

问题是,DATEADD允许传入小数,但如果您阅读文档,则小数将被截断为int。

如何计算分数年的到期日期?

2 个答案:

答案 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)

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