如何计算两个日期之间的营业时间/分钟?

时间:2018-08-08 04:40:55

标签: sql sql-server tsql

我正试图了解如何计算晚上7点至早上7点之间的营业时间。

例如,我有:

  • 开始时间:2018-01-10 19:15:00
  • 结束时间:2018-01-11 09:00:00

我希望计算结果在晚上7点到上午7点之间返回(11:45:00)。

1 个答案:

答案 0 :(得分:0)

您的要求不是很清楚,但是从以下内容开始应该是一个很好的查询:

declare @tmp table(StartTime datetime, EndTime datetime)

insert into @tmp values
 ('2018-07-01 19:35:00', '2018-07-01 21:55:00')
,('2018-08-01 12:35:00', '2018-08-01 21:55:00')
,('2018-08-01 12:35:00', '2018-08-02 05:55:00')
,('2018-08-01 12:35:00', '2018-08-02 07:00:00')
,('2018-08-01 12:35:00', '2018-08-02 07:15:00')

SELECT StartTime
    ,EndTime
    ,CASE 
        WHEN StartTime < dateadd(HOUR, 19, cast(cast(StartTime AS DATE) AS DATETIME))
            THEN convert(VARCHAR(5), dateadd(minute, datediff(MINUTE, dateadd(HOUR, 19, cast(cast(StartTime AS DATE) AS DATETIME)), 
                CASE 
                    WHEN endtime < DATEADD(HOUR, 7, cast(DATEADD(day, 1, cast(StartTime AS DATE)) AS DATETIME))
                        THEN endtime
                    ELSE DATEADD(HOUR, 7, cast(DATEADD(day, 1, cast(StartTime AS DATE)) AS DATETIME))
                    END), 0), 114)
        ELSE NULL
        END AS Extra_time
FROM @tmp

具有不同测试用例的结果:

enter image description here

注意:由于您希望在7PM到7AM之间工作时间,因此额外时间限制为12:00

注2:仅当开始时间在晚上7点之前才计算额外的时间,因为您在评论中写道:“如果开始时间在晚上7点之前,我仅需要在晚上7点之后的额外时间”