2014-02-26 182 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 ñ。