计算日期范围内特定日期的分钟数

时间:2019-09-17 14:23:12

标签: sql sql-server

我有一个保存车辆活动数据的表。表格中有开始日期和结束日期列。我希望构造一个查询,以分钟为单位显示每辆车在特定日期处于活动状态或工作的时间。我的问题是,开始日期和结束日期之间的时间可能会跨越几天。

示例:

dwVehicleIDFK    StartDate           EndDate             Minutes    HrsMins
731              18/09/2019 08:00    18/09/2019 13:00    300        05:00
797              18/09/2019 08:00    18/09/2019 12:00    240        04:00
687              17/09/2019 16:00    17/09/2019 21:00    300        05:00
826              17/09/2019 16:00    17/09/2019 21:00    300        05:00
734              18/09/2019 10:00    18/09/2019 15:30    330        05:30
843              18/09/2019 14:00    18/09/2019 18:00    240        04:00
662              18/09/2019 09:00    18/09/2019 14:00    300        05:00
662              17/09/2019 09:00    17/09/2019 14:00    300        05:00
662              16/09/2019 09:00    16/09/2019 14:00    300        05:00
817              18/09/2019 14:00    19/09/2019 08:00    1080       18:00

在上面的数据中,ID为817的车辆将持续两天。我如何获得查询以仅返回18/09的时间段或直到18/09的午夜的时间?

返回上面数据的查询:

Select
    dwVehicleIDFK,
    StartDate,
    EndDate,
    DATEDIFF(MINUTE, Convert(DateTime, StartDate, 103),
    Convert(DateTime, EndDate, 103)) as Minutes,
    CONVERT(varchar(5), DATEADD(minute, DATEDIFF(minute, 
        Convert(DateTime, StartDate, 103),
        Convert(DateTime, EndDate, 103)), 0), 114) as HrsMins
from 
    VehHistory

1 个答案:

答案 0 :(得分:1)

假设您已加载指定日期@Day的数据,并将开始/结束日期转换为临时表#temp中的日期时间:

Select
    dwVehicleIDFK,
    StartDate,
    EndDate,
    DATEDIFF(MINUTE, CASE WHEN StartDate<@Day THEN @Day ELSE StartDate END,
    CASE WHEN EndDate>DATEADD(DAY,1,@Day) THEN DATEADD(DAY,1,@Day) ELSE EndDate END) AS UsedMinutes
from #temp;