选择两次mysql之间的时间

时间:2014-02-26 21:27:43

标签: mysql sql

我必须检查特定时间是否在两次之间(开始和结束时间)。

打开和关闭时间在数据库中保存为与工作日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 

2 个答案:

答案 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)

如果时间包括日期(日期时间),并且您知道哪一个,那么您只需要一个。

相关问题