最近做了一個CRUD,每筆資料都會有開始時間及結束時間,請問一下要如何判斷使用者輸入的資料開始日期及結束日期,不能涵蓋到已經輸入的每筆資料的日期範圍?
例如:
已有資料
1.2020-5-14~2020-6-19
2.2020-7-14~2020-8-20
那輸入時就不能輸入2020-6-20~2020-7-15
WHERE (輸入開始時間 >= db開始時間 AND 輸入開始時間 <= db結束時間) OR (輸入結束時間 >= db開始時間 AND 輸入結束時間 <= db結束時間)
依上面的條件做。只要有拿到資料就不能。
忘了大包小的情況,修正如下
WHERE (輸入開始時間 >= db開始時間 AND 輸入開始時間 <= db結束時間) OR (輸入結束時間 >= db開始時間 AND 輸入結束時間 <= db結束時間) OR (db開始時間 >= 輸入開始時間 AND db開始時間 <= 輸入結束時間)
declare @dt = '2020/08/05'
if exists (
select * from table where date = @dt
)
print '已存在'
else
insert into table ...
如果在保證開始時間
小於結束時間
的情況下
允許的狀況其實只有 t1_s < t1_e < t2_s < t2_e
或 t2_s < t2_e < t1_s < t1_e
所以判斷是否交集可以用
WHERE NOT ( db時間結束 < 輸入時間開始 OR 輸入時間結束 < db時間開始)
經過邏輯處理,等同於
WHERE db時間結束 >= 輸入時間開始 AND 輸入時間結束 >= db時間開始