我必须检查特定时间是否介于两次(打开和关闭时间)之间。
打开和关闭时间在数据库中保存为与工作日ID(而不是日期)相关的“开始”和“结束”。
所以我的问题是,我有两种不同的情况,第一种情况是结束时间大于开始时间,例如end = 19:00:00和start = 09:00:00
但也可以是结束= 06:00:00和开始= 20:00:00
那么检查时间是否介于两次之间的性能方法是什么?
我的sql看起来像这样:
SELECT * FROM opening WHERE weekday_id = :weekday AND start <= :time AND end >= :time
在性能方面,没有很好的方式来处理此问题。正确的where声明是:
where
where (start <= end and :time between start and end) or (end < start and :time not between end and start)
当然,您不必使用between,您可以扩展它:
between
where (start <= end and :time >= start and :time <= end) or (end < start and (:time <= end or :time >= start))