簡體   English   中英

在mysql中的開始時間和結束時間之間獲取30分鍾的間隔數據

[英]Get 30 minutes interval data between start and end time in mysql

我在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運算符重寫上面的代碼。

從rest_restaurantbooking的WHERE TIMESTAMPDIFF(SECOND,bookingstart_time,bookingend_time)中選擇1800。

參考: 這里

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM