在我的 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、2:30,因为餐厅肯定在午夜后关闭。 如何在 SQL 查询中进行管理?如何查看指定时间段内餐厅是否营业?
目前我正在执行以下查询:
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 开始。但是如何管理数据库比较我没有得到最好的解决方案。
最佳答案
我建议您围绕开始时间和持续时间制定查询。您可以从当前的数据集中执行此操作。此查询从您的表中获取开始时间和持续时间。
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)
关于mysql - SQL 查询中的时间周期问题。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27949882/