查詢表中的兩個字段值落在某個區間內的數據

問題概述:表中有兩個字段,start_time(s),end_time(e),已知e>=s。

查詢要求:過濾出s落在某月2號到9號內的數據或者e落在2號到9號內的數據。

分析:按字面的理解,就是取條件:2<=s<=9||2<=e<=9下的數據,由於一條數據是由s和e同時確定的,所以這樣取出的數據, 是包含重複數據的,重複數據的條件是2<=s<=e<=9,當然使用distinct或者not exsit,not in等關鍵字可以過濾掉。

另一個好的思路是使用數學中集合補集的概念(當然第一個思路也使用了集合的思想):數據庫中的某條數據要麼符合條件,要麼不符合條件,兩者互斥。如果從正向直接找符合條件的不好找,那麼可以 逆向考慮,找不符合條件的數據,然後取其否定。在這個例子中,所有不符合條件的數據包括:s>9的數據(e>=s>9)和e<2的數據(s<=e<2),用數學表達式表示(s>9∪e<2,∪是||的意思),取其否定的數據即爲符合的條件的,否定的數據表達式爲:s<=9∩e>=2,(∩是&&的意思)轉換成sql表達式即爲  start_time <=9 AND end_time>=2

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章