图解-sql判断两个时间区间交叉重复

图解,sql判断两个时间区间交叉重复

这个图里已经说的很清楚了,最下边将图中的文字一并附上,
需要写成sql的自己根据条件和字段名改一下判断条件就可以了。

将 a b 慢慢向右移会产生的所有情况。

图解-sql判断两个时间区间交叉重复

 

一、边界相等不算重复
1.问题:
要求两个时间区间或者其他区间不能交叉,但是端点可以相等的情况
2.区间的大小有如下三种情况:(b-a表示传入参数,end - start 表示数据库字段名)
① b- a == end -start
② b- a > end -start
③ b- a < end -start
3.说明:
打√的表示存在重复了,打叉的表示没有重复
4.分类依据
这里把三种你情况的重复的进行了一个分类
第一类:只与start有交点
第二类:只与end 有交点
第三类:只要左边相等或者只要右边相等那么肯定会重复
第四类:b-a包含end-start
第五类:end -start 包含b - a
5.结果
(start < b && start > a //第一类
|| (end > a && end < b) //第二类
|| (start == a|| end == b) //第三类
|| (start > a && end < b) //第四类
|| (start < a && end > b) //第五类

**

二、边界相等也算重复
**
同时:如果认为边界相等也算重复的话在上边的一类和第二类的基础上把等号带上即可,其他不变
(start < =b && start > a //第一类
|| (end > =a && end < b) //第二类
|| (start == a|| end == b) //第三类
|| (start > a && end < b) //第四类
|| (start < a && end > b) //第五类