2014-02-26 136 views
2

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

开始时间和结束时间被保存在数据库中,作为与工作日ID相关的“开始”和“结束”而不是日期。

所以我的问题是,我有两个不同的情况下,第一种情况是,结束时间大于开始时间一样,如果结束= 19:00:00开始= 09:00:00

但它也可以是结束= 06:00:00和开始= 20:00:00

那么什么是性能方式来检查时间是在两次之间?

我的SQL是这样的:

SELECT * 
     FROM opening 
     WHERE weekday_id = :weekday 
     AND start <= :time 
     AND end >= :time 
+0

哪里是WHERE? :)尝试SELECT * FROM打开WHERE weekday_id =:weekday AND(start <=:time AND end> =:time)OR(start> =:time AND end <=:time) –

+0

抱歉,我将原始sql语句更改为至少为什么会出现这种错误 – Kingalione

+0

什么是开始和结束firlds类型? – kiks73

回答

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)) 
+0

优秀的答案。真的在同一个问题上挣扎。 – kyle

1

如果时间在同一天和你不知道这是开始和这是结束(似乎很奇怪),则:

SELECT * 
FROM opening 
WHERE weekday_id = :weekday 
    AND (:time BETWEEN start AND end OR :time BETWEEN end AND start) 

如果时间包括日期(日期时间),你知道哪个是哪个,那么你只需要一个betwee ñ。