我在mysql中有表结构,
table_id no_people booking_date bookingend_time bookingstart_time
14 2 2014-10-31 2014-10-31 13:30:00 2014-10-31 11:00:00
5 4 2014-10-31 2014-10-31 16:30:00 2014-10-31 14:30:00
6 2 2014-10-31 2014-10-31 17:00:00 2014-10-31 16:00:00
2 4 2014-11-06 2014-11-06 12:30:00 2014-11-06 10:00:00
2 4 2014-10-31 2014-10-31 16:00:00 2014-10-31 14:00:00
3 4 2014-11-01 2014-11-01 09:00:00 2014-11-01 07:30:00
6 2 2014-11-01 2014-11-01 10:00:00 2014-11-01 07:30:00
2 4 2014-11-03 2014-11-03 10:30:00 2014-11-03 08:30:00
5 4 2014-11-04 2014-11-04 10:30:00 2014-11-04 08:30:00
3 4 2014-11-05 2014-11-05 09:30:00 2014-11-05 07:30:00
14 2 2014-11-05 2014-11-05 09:30:00 2014-11-05 07:30:00
我想检索开始和结束时间间隔为 30 分钟的 table_id 数据。
例如: 如果我给预订开始时间 10:30 和结束时间 12:30 我应该得到 14 作为行.. 同样,它应该检查所有行并在两次之间返回..
到目前为止我的查询
SELECT `table_id` FROM `booking` WHERE bookingstart_time>='2014-10-31 10:30:00' AND bookingend_time<='2014-10-31 11:30:00'
最佳答案
第 1 步:将输入时间范围扩大 30 分钟前和 30 分钟后。 DATE_ADD()
DATE_SUB()
可以做到这一点:
DATE_SUB(_input_start_date_here_, INTERVAL 30 MINUTE)
第 2 步:根据开始时间和结束时间重新考虑您的问题。以下是可能的情况:
- 如果预订在(扩展的)期间开始,那么您希望在结果中包含此预订
- 或者如果预订在期间开始,那么您想要此预订,除非它也在期间结束
- 另一方面,如果预订是在时间段之后开始的,那么您不希望进行此预订
上面的第一种情况可以这样表示:
WHERE bookingstart_time >= DATE_SUB(_input_start_date_here_, INTERVAL 30 MINUTE)
AND bookingstart_time <= DATE_ADD(_input_end_date_here_, INTERVAL 30 MINUTE)
第二个条件留作练习。你也可以用更优雅的 BETWEEN
重写上面的内容运营商。
关于mysql - 在mysql中获取开始时间和结束时间之间的30分钟间隔数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27046814/