比较开始时间和结束时间之间的时间表条目的mysql查询
该表如下所示:比较开始时间和结束时间之间的时间表条目的mysql查询,mysql,sql,Mysql,Sql,该表如下所示: Field 1 : employee_name Field 2 : start_time Field 3 : end_time Field 4 : work_done 他将参加每天完成的工作 RAM 10:10 10:40 coding RAM 10:50 11:30 documentation 要求是不应有任何重叠的时间表条目。例如:,不应允许RAM在开始时间或结束时间再次输入[比如]10:20或11:10 查询RAM是在开始时间还是结束时间输入10:20还是11:10是什
Field 1 : employee_name
Field 2 : start_time
Field 3 : end_time
Field 4 : work_done
他将参加每天完成的工作
RAM 10:10 10:40 coding
RAM 10:50 11:30 documentation
要求是不应有任何重叠的时间表条目。例如:,不应允许RAM在开始时间或结束时间再次输入[比如]10:20或11:10
查询RAM是在开始时间还是结束时间输入10:20还是11:10是什么
请帮助您可以使用此逻辑获取另一个间隔的重叠
select t.*
from t
where @start_time < end_time and @end_time > start_time;
选择t*
从t
其中@start\u timestart\u time;
如果此查询不返回任何行,则不存在重叠。您还可以使用count(*)
获取重叠的计数
变量@start\u time
和@end\u time
包含要检查的新间隔
请注意,仅使用
between
检查时间是不够的,因为9:00-11:45
也会重叠,但表中的两个时间之间都没有终点。是否允许一个间隔的结束时间
等于下一个间隔的开始时间
?如果没有,则以下内容将查找所有重叠:
select
x.employee_name,
x.start_time as start_interval_1,
x.end_time as end_interval_1,
y.start_time as start_interval_2,
y.end_time as end_interval_2
from
timesheet as x
inner join timesheet as y on x.employee_name = y.employee_name
where
(x.start_time between y.start_time and y.end_time
or x.end_time between y.start_time and y.end_time
or y.start_time between x.start_time and x.end_time
or y.end_time between x.start_time and x.end_time)
and y.start_time >= x.start_time
and not (y.start_time = x.start_time and y.end_time = x.end_time);
如果希望允许此类端点重叠,则需要将between
子句替换为x.start\u-time>y.start\u-time和x.start\u-time