sql - 如何计算两个日期之间的营业时间/分钟?
问题描述
我试图了解如何计算晚上 7 点到早上 7 点之间的营业时间。
例如我有:
- 开始时间:
2018-01-10 19:15:00
- 时间结束:
2018-01-11 09:00:00
我预计计算会在晚上 7 点到早上 7 点之间返回(11:45:00)。
解决方案
您的要求不是很清楚,但是这应该是一个很好的查询:
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 点之后的额外时间”
推荐阅读
- laravel - Laravel 7外键约束格式不正确
- javascript - 如何验证表单中的电话号码:JavaScript
- javascript - 在第一行有行跨度的情况下,在表的第一行设置 css 样式 - 多表
- laravel - 404在laravel 6中找不到
- firebase - 测量 Firebase 的事件持续时间
- python - 如何将 Keras-Gaussian 噪声添加到图像数据中
- php - 多对多关系的 EntityType
- javascript - 从 javascript 中的 URL 获取和读取 json 文件内容给我 CORS 策略错误
- python - 使用汉宁插值从 plt 获取阈值
- javascript - gatsby 配置文件加载脚本