当时间跨越午夜时,Datediff

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当时间跨越午夜时,Datediff相关的知识,希望对你有一定的参考价值。

任何想法如何构建计算可能跨越午夜的时间的dateiff查询?

当然,如果是一个案例,我会分别计算部分往返午夜,但我需要通用查询,因为我有成千上万行,其中一些跨越午夜,有些则没有,而且对于每一行我不得不计算。约会(最长10分钟,不能超过2天)。

答案

DATEDIFF函数处理这两种情况。

SELECT DATEDIFF(MINUTE, '2011-12-20 11:43:00', '2011-12-20 11:50:00')
SELECT DATEDIFF(MINUTE, '2011-12-20 23:59:00', '2011-12-21 00:07:00')
另一答案

假设begin_work = 20:00:00 假设end_work = 06:00:00 答案= 08:00:00

选择 *, 案件 当end_work> begin_work时 那么timediff(end_work,begin_work) ELSE addtime(timediff('24:00:00',begin_work),end_work) END AS elapsed_time 来自my_table

限制 - 这仅适用于不超过23小时59分59秒的持续时间。如果持续时间超过24小时,我建议使用DATEDIFF

希望这可以帮助, 麦克风

另一答案

您看到的问题是由于datediff函数查看值:

declare @start datetime = '2000-01-01 23:59:59.997'
declare @end datetime = '2000-01-02 00:00:01.003'

select datediff(mi,@start,@end) [mins], datediff(ss,@start,@end) [secs]

output:
mins    secs
1       2

select datediff(ss,@start,@end)/60 [mins], datediff(ms,@start,@end)/1000 [secs]

output:
mins    secs
0       1

分钟值确实会发生变化。它包裹从59到00,所以函数正确返回1.为了正确计算经过的时间,我使用秒除以60表示分钟,毫秒除以1000表示秒。这可以防止跨越午夜问题。 (注意:3毫秒是SQL Server中时间的最小粒度)

以上是关于当时间跨越午夜时,Datediff的主要内容,如果未能解决你的问题,请参考以下文章

查找时间跨越午夜边界的每组的第一天

12点前的数据

第四十三章 SQL函数 DATEDIFF

pandas 在特定时间(不是午夜)将数据帧标准化为数据(引号)

如何在跨越多天的时间安排中获取一天的结束时间

当 ViewPager 中的片段出现和消失时如何执行一些代码