找出在 SQL 的给定时间有哪些餐厅营业?

Find out which restaurants are open at a given time in SQL?

有一个 SQL table 显示了 start_time 和 end_time 的餐馆。 一些餐厅在中午前营业,晚上关门。 但是其他人在晚上开放并在清晨关闭。 我想知道哪些餐厅在特定时间营业。

以下代码在24小时系统的情况下给出了满意的答案。 但是AM/PM的12小时制怎么办?

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);

如果出现以下 table 且当前时间 = 02:40 下午...

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,因此开始时间和结束时间都是两个范围的一部分。