会议室预约系统-检验是否被预约核心SQL
会议室预约系统,在工作中经常会用到,这里我记录下,首先看下面一张图
例如有这么一个场景,某公司有一个会议室9:00至11:00预约了,预约这段时间,其他人不得使用会议室。如何通过SQL实现?
注:这里9:00至11:00 对应字段分别是startTime和endTime,10:00至12:00 对应字段分别是newStartTime和newEndTime
这里10:00至12:00 对应字段分别是startTime和endTime,8:00至9:00 对应字段分别是newStartTime和newEndTime
Select Count(*) From table Where StartTime>=newStartTime AND EndTime<=newEndTime
通过判断Count大于1确定会议室这特定时间段是否有人使用,这里的使用是下面的区间法,如果Count>1 则表示有人预约
根据图一和图二理解起来更容易,可以把图中的时间代入sql中检测下,一测便知,下面是我用两种不同的方法实现如下
8:00-12:00 --预约时间段 8:00-9:00 --预约时间段
nst net nst net
9:00 -11:00 10:00-12:00
st et st et
st>=nst AND et<=net
9:00>=8:00 AND 11:00<=12:00 成立
10:00>=8:00 AND 12:00<=9:00 不成立