在SQL中找出哪些餐厅在给定时间营业



有一个SQL表,显示餐厅的开始时间和结束时间。一些餐馆中午前开门,晚上关门。但其他餐厅晚上开门,凌晨关门。我想知道哪些餐馆在某个时间开门。

在24小时制的情况下,以下代码给出了令人满意的答案。但是,如果是12小时制的AM/PM,该怎么办?

SELECT * FROM user_time WHERE 
(CASE
WHEN user_time.start_time > user_time.end_time THEN 'currenttime' BETWEEN user_time.start_time AND user_time.end_time+24
ELSE 'currenttime' BETWEEN user_time.start_time AND user_time.end_time
END);

如果下表和当前时间=02:40 PM…

1   03:00 PM    01:30 AM
2   03:30 PM    02:00 AM
3   02:30 PM    02:00 AM
4   10:00 AM    09:00 PM
5   08:30 AM    09:30 PM
6   05:00 PM    11:00 PM

结果应该是3,4,5

您可以使用布尔逻辑:

SELECT *
FROM user_time ut
WHERE ( -- start time is before end time so "between"
ut.start_time < ut.end_time and
current_time >= ur.start_time and
current_time <= ut.end_time
) or
( -- start time is after end time so "not between"
ut.start_time > ut.end_time and
(current_time >= ut.start_time or
current_time <= ur.end_time
)
);

逻辑是当开始时间小于结束时间时使用between,而当开始时间大于结束时间时则使用not between。但是,逻辑不使用between,因此开始和结束时间都是这两个范围的一部分。

相关内容

  • 没有找到相关文章

最新更新