SQL判断两个日期时间区间是否有相交

需求:找出时间A到B时间段是否已经请过假了,或者这个期间已经请过假了

select count(id) from tblName where ...

and ( (cast(concat(date_from,' ',time_from) as timestamp)    > '2018-03-30 08:00' 

  and cast(concat(date_from,' ',time_from) as timestamp)   < '2018-03-30 12:00')
               or( cast(concat(date_from,' ',time_from) as timestamp)   < '2018-03-30 08:00' 
                    and cast(concat(date_to,' ',time_to) as timestamp)  > '2018-03-30 08:00')
  or (cast(concat(date_from,' ',time_from) as timestamp)  = '2018-03-30 08:00' 
                     and cast(concat(date_from,' ',time_from) as timestamp)  <= '2018-03-30 12:00')
  )

有,则表示在这个时间段里有数据

解释:

找开始时间A到结束时间B的区间,是不是已经在数据库中有了

  1. 开始时间小于A,并且结束时间大于A;
  2. 开始时间小于B,并且结束时间大于等于B;
  3. 开始时间大于A,并且结束时间小于B;
  4. 开始时间等于A,并且结束时间大于等于B。

见下面抽象图解 -_-||:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值