加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

MySQL – 计较两个日期时刻之间的净时差,同时解除间断?

发布时间:2021-05-26 03:11:57 所属栏目:编程 来源:网络整理
导读:在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 0

在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

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读