SQL 请求中的时间周期问题。

Time Cycle issue in SQL Quires.

在我的 rails 应用程序中,目前每个餐厅的应用程序中都有开放和关闭时间表。喜欢

Monday 5:00 AM to 11:45 PM
Tuesday 6:00 AM to 11:00 PM
Wednesday 9:00 AM to 8:00 PM
Thursday 11:00 AM to 11:45 PM
Friday 5:00 AM to 11:45 PM
Saturday 5:00 AM to 11:45 PM

以上时间我已经以24小时数据库时间格式保存到数据库中了。它工作得很好。当我尝试获取有关 24 小时开放餐厅时间的信息时,我能够从数据库中查询数据。但现在我的客户希望关闭时间可以是 2:00 AM,2:30 AM,因为餐厅肯定在午夜后关闭。 如何在 SQL Quires 中进行管理?如何查看指定时间段内餐厅是否营业?

目前我正在执行以下查询:

SELECT 
COUNT(*)
FROM
`sechedules`
WHERE
`sechedules`.`sechedulable_id` = 16
    AND `sechedules`.`sechedulable_type` = 'Operation'
    AND (day = 'Wednesday')
    AND (opening_time <= '21:28:23'
    and closing_time >= '02:28:23'
    and is_closed = 0);

我可以改变一天的循环。它可以从 5:00 AM 到 4:59 AM 开始。但是如何在数据库比较中进行管理我没有得到最好的解决方案。

我建议您围绕开始时间和持续时间制定查询。您可以从当前的数据集中执行此操作。此查询从您的 table.

获取开始时间和持续时间
select weekday, 
       start, 
       stop,
       timediff(
           if (TIMESTAMPDIFF(MINUTE,start,stop)<0,stop+INTERVAL 24 HOUR, stop), 
           start) duration 
  from sechedules

如您所见,如果它出现在开门时间之前,则将关门时间增加 24 小时,这是在胡闹。

然后,您可以像这样检查一天中特定时间有多少条记录匹配。

select count(*) cnt
 where sechedulable_id = 16
   and day = 'Wednesday'
   and start <= '21:28:23'
   and '21:28:23' <= if(TIMESTAMPDIFF(MINUTE,start,stop)<0,stop+INTERVAL 24 HOUR, stop)