是否可以计算两个日期之间经过特定时间的次数?

时间:2019-04-30 13:21:52

标签: sql sql-server

我必须编写一个查询,向我显示两个不同时间戳跨度中午夜过去的次数。我尝试使用datediff,但这还不够准确,有时我最终计数的午夜实例数量超过了应有的数量。

如果我有两个日期时间字段entDtimeendDtime,是否可以计算午夜或00:00:00.001已经过去的次数?

例如,如果我有以下内容:

entDtime
--------
2019-01-01 07:57:12.143

endDtime
--------
2019-01-04 03:12:44.173

我需要计算两个日期之间午夜过去的实例,从逻辑上讲,我希望形式如下:

2019-01-02 00:00:00.001 (count: 1)
2019-01-03 00:00:00.001 (count: 2)
2019-01-04 00:00:00.001 (count: 3)

返回的值将为:3

这可能吗?

2 个答案:

答案 0 :(得分:1)

午夜时分,您可以使用:

select datediff(day, entDtime, endDtime)

您所描述的就是datediff()的工作原理。

答案 1 :(得分:0)

原文:

午夜每天只发生一次,所以我认为您可以转换日期并进行datediff。

declare @measureDateFrom date = '20190101'

select dateTimeToMeasure,datediff(day,@measureDateFrom,cast(dateTimeToMeasure as date) days
from table

编辑: 这应该返回相同的结果(并根据Larnu的评论进行更新):

declare @measureDateFrom date = '20190101'

select dateTimeToMeasure,datediff(day,@measureDateFrom,dateTimeToMeasure)  days
from table

我认为这可能是XY问题,我会猜猜用法:

如果您要计算上一行之间的午夜时间,就是这样:

select dateTimeToMeasure,datediff(day,lag(dateTimeToMeasure,1)over(order by dateTimeToMeasure),dateTimeToMeasure)  days
from table