兩種寫法。如圖,4種重合情況和2種不重合情況。
第一種寫法:
-- 時間段 a,b SELECT * FROM table WHERE (start_time >= a and end_time <= b) -- 被包含了 or (end_time >= a and end_time <=b) or (start_time >= a and start_time <=b) or (start_time <= a and end_time >=b)
解析:where后的4個條件分別代表了圖中4種重合的情況。
但是第一種情況被2和3包含了,所以簡化一下寫法:
SELECT * FROM table WHERE (end_time >= a and end_time <=b) or (start_time >= a and start_time <=b) or (start_time <= a and end_time >=b);
第二種寫法:
SELECT * FROM table WHERE not (start_time > b or end_time < a);