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

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

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

将 a b 慢慢向右移会产生的所有情况。
在这里插入图片描述

边界相等不算重复

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) //第五类

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值