2012-04-24 68 views
0

我有一個具有兩個字段start_intervalend_interval都存儲int值表示小時MySQL表。我使用這個查詢選擇從表中的記錄:SQL查詢DESC

SELECT * 
FROM messages 
WHERE 23 BETWEEN start_interval AND end_interval; 

如何,我可以得到值當start_intervalend_interval更大?例如,如果start_interval = 22end_interval = 5

+0

回答你的問題不談,你應該建立這種條件不可能發生。 – Yuck 2012-04-24 17:21:28

+0

考慮到問題的mysql標籤,'約束檢查'是大多數mysql用戶不習慣的東西。我同意約束是防止不良數據的必要條件 – 2012-04-24 17:26:53

+0

你的23看起來是任意的......你只要那些淨差值爲23或淨差值爲0-23或只有那些23或更多(小時)是你試圖找到的目的。 – DRapp 2012-04-24 21:19:52

回答

2

也許你檢查兩個方向:

SELECT * FROM messages 
WHERE 
    (23 BETWEEN start_interval AND end_interval) OR 
    (23 BETWEEN end_interval AND start_interval); 
7

如何:

SELECT * FROM messages 
WHERE 23 BETWEEN LEAST(start_interval, end_interval) AND 
       GREATEST(start_interval, end_interval); 
+0

+1這是一個聰明的解決方案 – Alp 2012-04-24 17:24:23

+0

嗨,不幸的是,這個查詢無法解決問題。因爲如果start_interval = 22,end_interval = 5,最小值將返回5,最大值將返回22,因此23永遠不會在5和22之間。區間值表示小時,所以22代表10PM,5代表5AM。 – GodFather 2012-04-24 20:35:15

+0

@GodFather:怎麼樣,在start_interval和if之間23(start_interval> = end_interval,end_interval + 24,end_interval)? – 2012-04-25 19:36:11

0
… 
WHERE 23 BETWEEN start_interval AND end_interval 
    OR start_interval > end_interval AND 
     23 NOT BETWEEN end_interval + 1 AND start_interval - 1 
0

如何:

where 23 between start_interval and if(start_interval>=end_interval,end_interval+24,end_interval)? 
+0

這也是我最初的想法,但後來我意識到它不適用於'4 BETWEEN 22 AND 5(+24)'之類的東西。 – 2012-04-26 05:05:38