mysql – 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点,凌晨2:30,因为餐厅在午夜之后肯定会关闭.
如何在SQL Quires中进行管理?如何检查餐厅是否开放的特定时间段?

目前我执行了以下Query:

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点到凌晨4点59分开始.但是如何在数据库比较中管理我没有得到最好的解决方案.

最佳答案 我建议你围绕开始时间和持续时间制定你的查询.您可以从当前的数据集中执行此操作.此查询从表中获取开始时间和持续时间.

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)
点赞