SQL Server DATEDIFF函数获取错误的值

时间:2014-06-13 11:12:39

标签: sql sql-server sql-server-2012

此功能带来错误的值

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

是错还是我错过了什么? 有什么方法可以解决这个问题?

1 个答案:

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

我不知道这是否是您问题的一般解决方案。