mysql - SQL 查询中的时间周期问题。

标签 mysql ruby-on-rails activerecord

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

相关文章:

php - 查询未在PHP中使用MySQL执行

ruby-on-rails - Ruby on Rails 表单输入

ruby-on-rails - RSpec 异常后继续

ruby-on-rails - 同时使用 MacPorts 和 RubyGems 有什么缺点吗?

sql - rails 5 : Query which excludes results if they're associated with a specific record

android - 如何在 android 中编写 Mp3 剪辑器或切割器?

php - 登录 phpMyAdmin 错误

mysql - 查找并返回前员工但不是现任员工

mysql - GET * 来自第一个表的数据通过相同的 ID 连接

ruby-on-rails - Rails date_select帮助程序和验证