總結起來就一句話:最小值小於最大值並且最大值大於最小值,則一定重疊。
我的使用場景: a 表 將時間有交叉的資料查出來
我的演算法:start_time,end_time 1> and 2>
1> 剔除完全相同 a1.start_time<>a2.start_time and a1.end_time!=a2.end_time
2> 最小值小於最大值並且最大值大於最小值 a1.start_timea2.start_time
select * from a a1 left join a a2 on (
a1.id=a2.id
)and (
a1.start_time<>a2.start_time and a1.end_time!=a2.end_time
and a1.start_timea2.start_time )
集合1(第乙個判斷)
start___________end
a___________b
集合2(第三個判斷)
start________________end
a_________b
集合3(第三個判斷)
start___________end
a______________b
集合4
start___________end
a_________________________b
集合1並上(or)集合3實際上包含了集合4邏輯
資料庫的字段 start_time, end_time
輸入的字段 a,b
第一種select * from test_table
where
(start_time >= a and start_time <= b)
or (start_time <= a and end_time >= b)
or (end_time >= a and end_time <= b)
第二種select * from test_table
where
not (
(end_time < a
or (start_time > b)
)
sql語句判斷兩個時間段是否有交集
場景 資料庫有有兩個欄位.開始時間,和結束時間,指定乙個時間段 a,b a表示開始時間,b表示結束時間。看資料庫中有沒有與 a,b 衝突的時間段,有的話就返回那條記錄。解析 兩個時間段相當於兩個集合,不過是有順序的集合。兩個時間段有交集細分有四種情況。用sql直接判斷無交集的語句可能也有,但是目前沒...
sql語句判斷兩個時間段是否有交集
場景 資料庫有有兩個欄位.開始時間,和結束時間,指定乙個時間段 a,b a表示開始時間,b表示結束時間。看資料庫中有沒有與 a,b 衝突的時間段,有的話就返回那條記錄。解析 兩個時間段相當於兩個集合,不過是有順序的集合。兩個時間段有交集細分有四種情況。用sql直接判斷無交集的語句可能也有,但是目前沒...
sql語句判斷兩個時間段是否有交集
場景 資料庫有有兩個欄位.開始時間,和結束時間,指定乙個時間段 a,b a表示開始時間,b表示結束時間。看資料庫中有沒有與 a,b 衝突的時間段,有的話就返回那條記錄。解析 兩個時間段相當於兩個集合,不過是有順序的集合。兩個時間段有交集細分有四種情況。用sql直接判斷無交集的語句可能也有,但是目前沒...