![](/img/trans.png)
[英]how to get the number on months between two dates in sql server 2005
[英]how do I get the EXACT number of months between two dates?
DATEDIFF(MONTH, '1/1/2014', '12/31/2014') + 1
这将给我12。
如果我这样做:
DATEDIFF(MONTH, '1/1/2014', '12/30/2014') + 1
它应该给我11点东西。 如何获得这两个日期之间的确切月份数? 这需要适用于日期的任意组合(每年的任何月份)。
您可以通过以下方式自己进行计算:
DECLARE @startdate date = '1/1/2014'
DECLARE @enddate date = '12/30/2014'
DECLARE @startday int = DATEPART(DAY, @startdate)
DECLARE @endday int = DATEPART(DAY, @enddate)
DECLARE @startdateBase date = DATEADD(DAY, 1 - @startday, @startdate)
DECLARE @enddateBase date = DATEADD(DAY, 1 - @endday, @enddate)
DECLARE @deciMonthDiff float = CAST(DATEDIFF(MONTH, @startdate, @enddate) AS float) -
(@startday - 1.0) / DATEDIFF(DAY, @startdateBase, DATEADD(MONTH, 1, @startdateBase)) +
(@endday - 1.0) / DATEDIFF(DAY, @enddateBase, DATEADD(MONTH, 1, @enddateBase))
SELECT @deciMonthDiff
计算得出@deciMonthDiff
为11.935483870967。
当然,您可以根据需要尽可能多地“内联”此代码,以避免所有中间声明。
想法是计算总月份差异,然后根据实际日期减去第一个月和最后一个月份的相对部分。
带有MONTH选项的DATEDIFF仅返回整数值。 使用天数或年数会给您带来粗略的“猜测”,但仍不完全正确(一个月/年中的天数不同,因此您不能仅将天数除以30)。
如果您希望准确无误,则需要编写自己的函数以从头到尾遍历几个月,并计算每个月有多少天,并获得该月涵盖的百分比/因数。
DECLARE @startdate date = '1/1/2014'
DECLARE @enddate date = '12/30/2014'
select case when DATEPART(DAY, @startdate) <= DATEPART(DAY, @enddate)
then datediff(month, @startdate, @enddate)
else datediff(month, @startdate, @enddate) -1
end
来自Chris The T-SQL的Jedi
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.