此功能带来错误的值
select DATEDIFF(MONTH,'09-01-2014','08-31-2016')
Result:23
it must be :24
select DATEDIFF(MONTH,'01-01-2014','08-31-2016')
Result:31
it must be :32
select DATEDIFF(MONTH,'07-01-2013','06-30-2016')
Result:35
it must be :36
是错还是我错过了什么? 有什么方法可以解决这个问题?
答案 0 :(得分:3)
你错过了datediff()
真正做的事情。它衡量"边界和#34;日期之间的部分交叉。这意味着2014-01-01和2014-01-31之间的差异(以月为单位)为0
。 2014-01-31和2014-02-01之间的差异为1
。
documentation并不羞于这种行为。它开始了:
返回指定datepart的count(有符号整数) 在指定的startdate和enddate之间交叉的边界。
编辑:
对于您在问题中提供的示例,您可以在最后日期添加一天:
select DATEDIFF(MONTH, '2014-09-01', dateadd(day, 1, '2016-08-31'))
我不知道这是否是您问题的一般解决方案。