我正在寫一個程序我創建了一些開始日期(帶日期選擇器)和結束日期(也帶有日期選擇器)的對象。 現在我需要檢查此對象的日期範圍是否與存儲在數據庫中的任何其他對象的日期範圍重疊。如果是這樣,我不能將它保存在數據庫中,但如果它不能的話。檢查重疊日期(vb.net)
任何人都有一個想法如何做到這一點?
我正在寫一個程序我創建了一些開始日期(帶日期選擇器)和結束日期(也帶有日期選擇器)的對象。 現在我需要檢查此對象的日期範圍是否與存儲在數據庫中的任何其他對象的日期範圍重疊。如果是這樣,我不能將它保存在數據庫中,但如果它不能的話。檢查重疊日期(vb.net)
任何人都有一個想法如何做到這一點?
您有3種重疊方案:包含開始,包含結束和換行範圍。這可以在SQL中這樣表示:
select count(1)
from YourTable
where (@start >= Start and @start <= End) /* contains start */
or (@end >= Start and @end <= End) /* contains end */
or (@start < Start and @end > End) /* wraps range */
實際操作中發出此查詢到數據庫取決於你怎麼做的,此刻的數據訪問。
最簡單的重疊檢查,看是否新事件的另一個事件結束前啓動,它開始後結束等價於。如果兩個條件都成立,則新事件與舊事件重疊。
select *
from YourTable
where @start < End and @end > Start
這實際上並不是VB.NET特有的,它更多的是關於在一個查詢中檢查這個問題所需的SQL邏輯。 – 2009-11-15 11:27:37