当时间跨越午夜时,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的主要内容,如果未能解决你的问题,请参考以下文章