我需要计算到期日期。应该很容易吧?那么,我的“寿命”是几年而不是几天,并且为了使它更具挑战性,这些年份的价值可能是分数。这里是我开始有:如何计算SQL Server中的到期日期?
set @ExpirationDate = DATEADD(year, @LifeSpanYears, @BeginDate)
的问题是,DATEADD允许小数传递的,但如果你阅读文档,小数被截断为int。
如何计算分数年的到期日期?
我需要计算到期日期。应该很容易吧?那么,我的“寿命”是几年而不是几天,并且为了使它更具挑战性,这些年份的价值可能是分数。这里是我开始有:如何计算SQL Server中的到期日期?
set @ExpirationDate = DATEADD(year, @LifeSpanYears, @BeginDate)
的问题是,DATEADD允许小数传递的,但如果你阅读文档,小数被截断为int。
如何计算分数年的到期日期?
这是我想出了答案:
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
注:当我在做这个,我意识到,这是不可能确定使用分数年作为生命周期的确切截止日期。你怎么知道什么时候增加闰日?如果你真的想要确切的答案,你需要几天的寿命。
实际上,“年限寿命”可能是几个月的寿命。如果是这样,你可以考虑:
return dateadd(month, round(@LIfeSpanYears * 12, 0), @BeginDate)
这处理闰年的问题。但是,它的代价只有几个月才能解决。
你知道我还能做什么吗?我可以分开LifeSpanYears的整数和小数部分。使用我的答案添加小数天数,然后添加处理闰年的整数年数。答案仍然不确定,因为我甚至不知道答案*应该是什么。 :) – Jess
@Jess。 。 。那将接近。它不会处理日子跨过闰年边界的情况,但最多只能在一天内关闭。 –