在mysql中获取30分钟的开始和结束时间间隔数据

时间:2014-11-20 18:24:35

标签: mysql sql

我在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

我想检索table_id数据,开始和结束时间间隔为30分钟。

例:  如果我给预订开始时间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'

2 个答案:

答案 0 :(得分:1)

步骤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运算符重写上述内容。

答案 1 :(得分:0)

SELECT restaurant_table FROM rest_restaurantbooking WHERE TIMESTAMPDIFF(SECOND,bookingstart_time,bookingend_time)&gt; 1800。

供参考:HERE