为什么dateiff比实际差异少1天?

Joh*_*ash 3 sql sql-server

考虑以下SQL片段:

Select DATEDIFF(dd, '2014-09-22 09:14:01.850','2014-09-24 17:14:53.243') -- 1
Run Code Online (Sandbox Code Playgroud)

这返回"2",但我实际上想要"3",因为我正在计算员工参加的总天数.即在上述情况下,他参加了3天,但datediff显示2.有没有办法解决这个问题?

Don*_*nal 5

dd参数的DATEDIFF 返回2个日期之间的日期边界数.

所以DATEDIFF(dd, '2014-09-22 09:14:01.850','2014-09-24 17:14:53.243')将返回2 - 因为它计算的是第23和第24.如果你想计算第22,第23和第24,那么只需加1,例如

Select DATEDIFF(dd, '2014-09-22 09:14:01.850','2014-09-24 17:14:53.243') + 1
Run Code Online (Sandbox Code Playgroud)

  • 是的,这是同样的原因`3 - 1 = 2`而不是`3 - 1 = 3`,即使有三个数字(如果你算数)(1,2和3).你正在做的是减法,但你要找的是*基数*.另一种看待它的方法是考虑开始和结束在同一天的情况.从今天到今天有0天,但仍有一天涉及.这就是你需要加1的原因. (6认同)