我们在写代码或者程序的时候,经常会遇到要判断、校验两个时间段是否有重合的问题。
本文提供两种方法来解决,代码也都贴的很详细,希望对需要的朋友有帮助。
解决思路
经过一通分析,可以得出共有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