开发中经常会遇到时间段检查冲突问题,比如预约时间段检查等
判断给定的时间段是否和当前表中的时间段不重叠,只要判断给定的开始时间大于记录中的结束时间,或者给定的结束时间小于记录中的开始时间;
也就是判断重叠,给定的开始时间最小值小于记录中的结束时间最大值并且给定的结束时间最大值大于记录中的开始时间最小值,则一定重叠!
实现
假设数据库表t_table 存的开始时间和结束时间是start_date和end_date
两种方式:
SELECT * FROM t_table WHERE (start_date > :start AND start_date < :end) OR (start_date < :start AND end_date > :end) OR (end_date > :start AND end_date < :end)
另一种
SELECT * FROM t_table WHERE NOT ( (end_date <= :start) OR (start_date >= :end) )
以上:start和:end是占位符,相当于是开始时间和结束时间,至于边界条件的选择,可以根据自己业务的需求,选择>=还是>或者<=还是<
文章评论