在MySQL查询中,我使用timediff/time_to_sec函数来计算两个日期之间的总分钟数.
例如:
2010-03-23 10:00:00
-
2010-03-23 08:00:00
= 120 minutes
Run Code Online (Sandbox Code Playgroud)
我想要做的是排除在所选时间范围内发生的任何中断.
例如:
2010-03-23 10:00:00
-
2010-03-23 08:00:00
-
(break 08:55:00 to 09:10:00)
= 105 minutes
Run Code Online (Sandbox Code Playgroud)
有没有一种好方法可以在不使用一长串嵌套IF语句的情况下执行此操作?
UPDATE1:
澄清 - 我试图计算用户完成给定任务所需的时间.如果他们喝咖啡休息时间,则需要排除时间段.咖啡休息时间是固定的.
Jho*_*re- 10
将所有在时间段内发生的中断加起来,然后减去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
Run Code Online (Sandbox Code Playgroud)
假设这个结构:
CREATE TABLE work_unit (
id INT NOT NULL,
initial_time TIME,
final_time TIME
)
CREATE TABLE break (
id INT NOT NULL,
initial_time TIME,
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')
Run Code Online (Sandbox Code Playgroud)
您可以使用下一个查询来计算它:
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22113 次 |
| 最近记录: |