我必须检查特定时间是否在两次之间(开始和结束时间)。
打开和关闭时间在数据库中保存为与工作日ID相关的“开始”和“结束”,而不是日期。
所以我的问题是,我有两种不同的情况,第一种情况是结束时间大于开始时间,如结束= 19:00:00和开始= 09:00:00
但它也可以是end = 06:00:00并且start = 20:00:00
那么检查时间是否介于两次之间的性能方法是什么?
我的sql看起来像这样:
SELECT *
FROM opening
WHERE weekday_id = :weekday
AND start <= :time
AND end >= :time
答案 0 :(得分:9)
处理这个问题并没有很好的表现方式。正确的where
语句是:
where (start <= end and :time between start and end) or
(end < start and :time not between end and start)
当然,您不必使用between
,您可以将其展开:
where (start <= end and :time >= start and :time <= end) or
(end < start and (:time <= end or :time >= start))
答案 1 :(得分:1)
如果时间是在同一天,你不知道哪个是开始,哪个是结束(看起来很奇怪)那么:
SELECT *
FROM opening
WHERE weekday_id = :weekday
AND (:time BETWEEN start AND end OR :time BETWEEN end AND start)
如果时间包括日期(日期时间),并且您知道哪一个,那么您只需要一个。