Sql 为什么datediff返回的时间比实际差异少1天?

Sql 为什么datediff返回的时间比实际差异少1天?,sql,sql-server,Sql,Sql Server,考虑以下SQL代码片段: Select DATEDIFF(dd, '2014-09-22 09:14:01.850','2014-09-24 17:14:53.243') -- 1 这返回“2”,但实际上我想要“3”,因为我计算的是一名员工参加的总天数。即,在上述情况下,他已参加了3天,但datediff显示了2。有没有办法解决这个问题?DATEDIFF和dd参数返回两个日期之间的日期边界数 因此,DATEDIFF(dd,'2014-09-22 09:14:01.850','2014-09-2

考虑以下SQL代码片段:

Select DATEDIFF(dd, '2014-09-22 09:14:01.850','2014-09-24 17:14:53.243') -- 1

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

DATEDIFF和
dd
参数返回两个日期之间的日期边界数

因此,
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

由于某些未知原因,
DATEDIFF(dd,…
函数根据每天24小时计算天数。如果剩余时间少于24小时,则显示为零

您应该只使用日期部分的时间


(这是一个老帖子,但从来没有得到正确的回复)

只需在结果中添加1?如果右边的时间早于左边的时间,则预期的答案是2吗?获取小时数,除以24,然后取整。Datediff返回一个值与另一个值之间传递的边界数;如果是天,则将函数视为计算午夜。如果希望查询返回三个值(每个实际涉及的日期一个),或者连接到日历表,自动向结果中添加一个日历表,或者以小时为单位计算datediff,除以24.0,然后将其四舍五入到最接近的整数number@AHiggins我刚刚在datediff中加了1,可以吗?@JohnNash,如果它返回了你想要的结果,并且你知道为什么,那么是的,可以。你考虑过周末吗?emp的日期loyee没有上班?午夜轮班(例如,晚上11:00签到,早上7:00签到算吗)?是的,这是同样的原因
3-1=2
而不是
3-1=3
,即使你数了三个数字(1、2和3)。你所做的是减法,但你要寻找的是基数。另一种看待它的方式是考虑开始和结束在同一日期的情况。今天和今天之间有0天,但仍然有一天。这就是为什么你需要加1。