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