基于时间范围的MySQL选择

基于时间范围的MySQL选择,mysql,time,Mysql,Time,我有一个插槽数据库,其中有一个开始时间和结束时间日期,但这是由。因此,数据库中已预订时段的一些示例结果如下: ---------------------------------- start_time - end_time - ---------------------------------- 09:00 15:00 17:00 18:00 19:00 21:00 ---------

我有一个插槽数据库,其中有一个开始时间和结束时间日期,但这是由。因此,数据库中已预订时段的一些示例结果如下:

----------------------------------
start_time        -  end_time    -
----------------------------------
09:00                15:00
17:00                18:00
19:00                21:00
----------------------------------
假设我想检查以下时间是否可用:

09:00 - 10:00 - ( This is Unavailable in the results above )
18:00 - 19:00 - ( Available based on the results above )
什么是MySQL查询来处理这个问题?

SELECT*, 不存在选择空 从时隙 其中timeslot.time\u start 示例:

SELECT COUNT(*) FROM slots WHERE end_time>'09:00' AND start_time<'10:00'
->1:不可用

SELECT COUNT(*) FROM slots WHERE end_time>'18:00' AND start_time<'19:00'
SELECT COUNT(*) FROM slots WHERE end_time>'16:30' AND start_time<'17:30'
->0:可用

SELECT COUNT(*) FROM slots WHERE end_time>'14:30' AND start_time<'15:30'
->1:不可用

SELECT COUNT(*) FROM slots WHERE end_time>'18:00' AND start_time<'19:00'
SELECT COUNT(*) FROM slots WHERE end_time>'16:30' AND start_time<'17:30'
->1:不可用

SELECT COUNT(*) FROM slots WHERE end_time>'18:00' AND start_time<'19:00'
SELECT COUNT(*) FROM slots WHERE end_time>'16:30' AND start_time<'17:30'
如果它返回零,你就可以走了

示例:

SELECT COUNT(*) FROM slots WHERE end_time>'09:00' AND start_time<'10:00'
->1:不可用

SELECT COUNT(*) FROM slots WHERE end_time>'18:00' AND start_time<'19:00'
SELECT COUNT(*) FROM slots WHERE end_time>'16:30' AND start_time<'17:30'
->0:可用

SELECT COUNT(*) FROM slots WHERE end_time>'14:30' AND start_time<'15:30'
->1:不可用

SELECT COUNT(*) FROM slots WHERE end_time>'18:00' AND start_time<'19:00'
SELECT COUNT(*) FROM slots WHERE end_time>'16:30' AND start_time<'17:30'

->1:不可用

从结束时间>=:开始和开始的插槽中选择*_time@MauricePerry-如果“发件人”和“收件人”重叠但不完全在现有约会范围内,则该选项无效。@Quentin你能想出一个例子吗?@MauricePerry-开始时间14:00,结束时间15:30@Quentin第一个将匹配end_time>=:FROM和start的插槽中的SELECT*FROM_time@MauricePerry-如果“发件人”和“收件人”重叠但不完全在现有约会范围内,则该选项无效。@Quentin你能想出一个例子吗?@MauricePerry-开始时间14:00,结束时间15:30@Quentin第一个可能会注意到,预订通常采用“开盘-收盘”策略,我想他们会这样称呼它,但我不知道为什么其中一个比较总是“或等于”。顺便说一句,虽然逻辑上明显相同,我确实发现a.startb.start更容易理解。@草莓我认为任何小于另一个端点的开头都更清晰、更容易记住。@草莓其中一个比较总是“或等于”。我怀疑邻接会妨碍预订。如果不是,则必须添加一些偏差。请注意,预订通常采用“开盘-收盘”策略,我想他们会这样称呼它,但我不知道为什么其中一个比较总是“或等于”。顺便说一句,虽然逻辑上明显相同,我确实发现a.startb.start更容易理解。@草莓我认为任何小于另一个端点的开头都更清晰、更容易记住。@草莓其中一个比较总是“或等于”。我怀疑邻接会妨碍预订。如果没有,则必须添加一些偏差。
SELECT COUNT(*) FROM slots WHERE end_time>'18:00' AND start_time<'19:00'
SELECT COUNT(*) FROM slots WHERE end_time>'16:30' AND start_time<'17:30'