SQL判断时间有没有交叉

假如有时间A,判断表里面有没有与时间A交叉的时间B

判断时间四种交叉情况就行了


1、时间A范围完全在时间B范围内

     时间A起始范围                        ━━━━━━━━━━━━━━━━━━

     时间B起始范围            ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━


2、时间A完全包含了时间B的起始范围

     时间A起始范围            ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

     时间B起始范围                        ━━━━━━━━━━━━━━━━━━


3、时间A范围相交与时间B范围左边

     时间A起始范围            ━━━━━━━━━━━━

     时间B起始范围                             ━━━━━━━━━━━━━━━━━━━━━━


4、时间A范围相交与时间B范围右边

     时间A起始范围                                                   ━━━━━━━━━━━━

     时间B起始范围            ━━━━━━━━━━━━━━━━━━━━━━━━


假如现在有表t,字段begin_time和end_time

表t
begin_timeend_time
2017-12-16 11:07:252017-12-28 11:07:28
2017-12-06 11:07:302017-12-15 11:07:32


用MYSQL实现:

select *
from t a
where 1=1
      and (('2017-12-26 11:09:30' <= a.begin_time and '2017-12-26 11:09:30' >= a.end_time) -- 情况1
            or ('2017-12-26 11:09:30' >= a.begin_time and '2017-12-26 11:09:30' <= a.end_time) -- 情况2
            or ('2017-12-26 11:09:30' <= a.begin_time and ('2017-12-26 11:09:30' >= a.begin_time and '2017-12-26 11:09:30' <= a.end_time)) -- 情况3
            or (('2017-12-26 11:09:30' >= a.begin_time and '2017-12-26 11:09:30' <= a.end_time) and '2017-12-26 11:09:30' >= a.end_time) -- 情况4
            )

如果查询出记录,则说明有时间交叉的数据存在。

如果用的不是MYSQL,可能需要转换格式或者使用between进行比较

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值