比较开始时间和结束时间之间的时间表条目的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