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