2009-11-15 92 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