2009-11-15 98 views
3

我正在寫一個程序我創建了一些開始日期(帶日期選擇器)和結束日期(也帶有日期選擇器)的對象。 現在我需要檢查此對象的日期範圍是否與存儲在數據庫中的任何其他對象的日期範圍重疊。如果是這樣,我不能將它保存在數據庫中,但如果它不能的話。檢查重疊日期(vb.net)

任何人都有一個想法如何做到這一點?

+0

這實際上並不是VB.NET特有的,它更多的是關於在一個查詢中檢查這個問題所需的SQL邏輯。 – 2009-11-15 11:27:37

回答

9

下面什麼加里建議

select count(1) 
from  YourTable 
where (@start < End and @end > Start) 
+0

良好的通話。感覺有一個簡化,但不能完全達到那裏。 – 2009-11-15 14:11:17

+0

謝謝,你們倆 – Ayrton 2009-11-15 15:02:29

+0

耶 - 在凌晨1點這是最好的意見了:) +1 – ppumkin 2012-11-21 00:40:23

5

您有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 */ 

實際操作中發出此查詢到數據庫取決於你怎麼做的,此刻的數據訪問。

3

最簡單的重疊檢查,看是否新事件的另一個事件結束前啓動,它開始後結束等價於。如果兩個條件都成立,則新事件與舊事件重疊。

select * 
from  YourTable 
where @start < End and @end > Start