首页 > 解决方案 > 如何计算两个日期之间的营业时间/分钟?

问题描述

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

例如我有:

我预计计算会在晚上 7 点到早上 7 点之间返回(11:45:00)

标签: sqlsql-servertsql

解决方案


您的要求不是很清楚,但是这应该是一个很好的查询:

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

不同测试用例的结果:

在此处输入图像描述

注意:额外时间的上限为 12:00,因为您希望工作时间在晚上 7 点到早上 7 点之间

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


推荐阅读