我们在写代码或者程序的时候,经常会遇到要判断、校验两个时间段是否有重合的问题。

本文提供两种方法来解决,代码也都贴的很详细,希望对需要的朋友有帮助。

解决思路

经过一通分析,可以得出共有4种重合、2种不重合共6种情况。

参见下图:

startTime + endTime 是一组时间,a + b 是一组时间,这两个时间段进行比较。

第一种写法

SELECT * FROM table WHERE
      (start_time >= a and end_time <= b)
   or (end_time >= a and end_time <=b)
   or (start_time >= a and start_time <=b)
   or (start_time <= a and end_time >=b)

解析:上图的四种重合情况,就对应了上面sql语句里where关键字后面的四个条件。 不过,再分析下,可以发现第一种情况被2和3包含了,so,可以优化下该SQL:

SELECT * FROM table WHERE
  (end_time >= a and end_time <=b)
   or (start_time >= a and start_time <=b)
   or (start_time <= a and end_time >=b);

第二种写法

解析:这种写法是根据上图里两个不重合的情况,然后取反得出的

SELECT * FROM table WHERE not (start_time > b or end_time < a);

总结

开发过程中,不管遇到啥问题,我们只要勤于思考,问题都能迎刃而解,MySQL里如何判断时间段是否重合的方法就介绍完了。

本文由《MySql教程网》原创,转载请注明出处!https://mysql360.com