站长网 MySql教程 MySQL – 计算两个日期时间之间的净时差,同时排除中断?

MySQL – 计算两个日期时间之间的净时差,同时排除中断?

在MySQL查询中,我使用timediff / time_to_sec函数来计算两个日期之间的总分钟数. 例如: 2010-03-23 10:00:00-2010-03-23 08:00:00= 120 minutes 我想要做的是排除在所选时间范围内发生的任何中断. 例如: 2010-03-23 10:00:00-2010-03-23 08:00:00-(break

在MySQL查询中,我使用timediff / time_to_sec函数来计算两个日期之间的总分钟数.

例如:

2010-03-23 10:00:00
-
2010-03-23 08:00:00
= 120 minutes

我想要做的是排除在所选时间范围内发生的任何中断.

例如:

2010-03-23 10:00:00
-
2010-03-23 08:00:00
-
(break 08:55:00 to 09:10:00)
= 105 minutes

有没有一种好方法可以在不使用一长串嵌套IF语句的情况下执行此操作?

UPDATE1:

澄清 – 我试图计算用户完成给定任务所需的时间.如果他们喝咖啡休息时间,则需要排除时间段.咖啡休息时间是固定的.

最佳答案
将所有在时间段内发生的中断加起来,然后减去timediff / time_to_sec函数的结果

SELECT TIME_TO_SEC(TIMEDIFF('17:00:00','09:00:00')) -- 28800

SELECT TIME_TO_SEC(TIMEDIFF('12:30:00','12:00:00')) -- 1800
SELECT TIME_TO_SEC(TIMEDIFF('10:30:00','10:15:00')) -- 900

-- 26100

假设这个结构:

CREATE TABLE work_unit (
 id INT NOT NULL,initial_time TIME,final_time TIME
)
CREATE TABLE break (
 id INT NOT NULL,final_time TIME
)
INSERT work_unit VALUES (1,'09:00:00','17:00:00')
INSERT break VALUES (1,'10:00:00','10:15:00')
INSERT break VALUES (2,'12:00:00','12:30:00')

您可以使用下一个查询来计算它:

SELECT *,TIME_TO_SEC(TIMEDIFF(final_time,initial_time)) total_time,(SELECT SUM(
 TIME_TO_SEC(TIMEDIFF(b.final_time,b.initial_time)))
  FROM break b 
  WHERE (b.initial_time BETWEEN work_unit.initial_time AND work_unit.final_time) OR (b.final_time BETWEEN work_unit.initial_time AND work_unit.final_time)
 ) breaks 
FROM work_unit

本文来自网络,不代表站长网立场,转载请注明出处:https://www.zwzz.com.cn/html/jc/mysql/2021/0525/6195.html

作者: dawei

【声明】:站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。
联系我们

联系我们

0577-28828765

在线咨询: QQ交谈

邮箱: xwei067@foxmail.com

工作时间:周一至周五,9:00-17:30,节假日休息

返回顶部