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

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

概述在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

在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')) -- 28800SELECT TIME_TO_SEC(TIMEDIFF('12:30:00','12:00:00')) -- 1800SELECT 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
总结

以上是内存溢出为你收集整理的MySQL – 计算两个日期时间之间的净时差,同时排除中断?全部内容,希望文章能够帮你解决MySQL – 计算两个日期时间之间的净时差,同时排除中断?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1167956.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-01
下一篇 2022-06-01

发表评论

登录后才能评论

评论列表(0条)

保存