我必须编写一个查询,向我显示两个不同时间戳跨度中午夜过去的次数。我尝试使用datediff
,但这还不够准确,有时我最终计数的午夜实例数量超过了应有的数量。
如果我有两个日期时间字段entDtime
和endDtime
,是否可以计算午夜或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
这可能吗?
答案 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