判断两个时间段是否有交集

判断两个时间段是否有交集

前言:项目中遇到了类似会议室预约的时间段被占用,预约车辆时间段被占用等。

start:预约开始时间。

end:预约结束时间。

必备条件:start <= end

思考:

怎么判断是否被占用呢?

预约的时间,与目标数据库中任意一条的存在交集,则可以视为占用。

有交集的情况有那几种呢?

  1. (a >= start & a <= end)
    判断两个时间段是否有交集_第1张图片

  2. (b >= start & b <= end)
    判断两个时间段是否有交集_第2张图片

  3. (a <= start & b >= end)
    判断两个时间段是否有交集_第3张图片

  4. (a >= start & b <= end)
    判断两个时间段是否有交集_第4张图片

合并则是 (a >= start and a <= end) or (b >= start and b <= end) or (a <= start and b >= end) or (a >= start and b <= end)

优化:a <= end and b >= start (即可满足4种条件)

补充没有交集

取反(没有交集)

a > end or b < start

判断两个时间段是否有交集_第5张图片

总结:思路不太清楚可以画个图就明了了。查询出目标库中有交集的数据就说明有占用,如果没有则没有占用。

你可能感兴趣的:(Java,SQL,sql,java)