假如有时间A,判断表里面有没有与时间A交叉的时间B
判断时间四种交叉情况就行了
1、时间A范围完全在时间B范围内
时间A起始范围 ━━━━━━━━━━━━━━━━━━
时间B起始范围 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
2、时间A完全包含了时间B的起始范围
时间A起始范围 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
时间B起始范围 ━━━━━━━━━━━━━━━━━━
3、时间A范围相交与时间B范围左边
时间A起始范围 ━━━━━━━━━━━━
时间B起始范围 ━━━━━━━━━━━━━━━━━━━━━━
4、时间A范围相交与时间B范围右边
时间A起始范围 ━━━━━━━━━━━━
时间B起始范围 ━━━━━━━━━━━━━━━━━━━━━━━━
假如现在有表t,字段begin_time和end_time
begin_time | end_time |
2017-12-16 11:07:25 | 2017-12-28 11:07:28 |
2017-12-06 11:07:30 | 2017-12-15 11:07:32 |
用MYSQL实现:
select *
from t a
where 1=1
and (('2017-12-26 11:09:30' <= a.begin_time and '2017-12-26 11:09:30' >= a.end_time) -- 情况1
or ('2017-12-26 11:09:30' >= a.begin_time and '2017-12-26 11:09:30' <= a.end_time) -- 情况2
or ('2017-12-26 11:09:30' <= a.begin_time and ('2017-12-26 11:09:30' >= a.begin_time and '2017-12-26 11:09:30' <= a.end_time)) -- 情况3
or (('2017-12-26 11:09:30' >= a.begin_time and '2017-12-26 11:09:30' <= a.end_time) and '2017-12-26 11:09:30' >= a.end_time) -- 情况4
)
如果查询出记录,则说明有时间交叉的数据存在。
如果用的不是MYSQL,可能需要转换格式或者使用between进行比较