3

在我正在编写的程序中,我正在创建一些具有开始日期(使用日期选择器)和结束日期(也使用日期选择器)的对象。现在我需要检查该对象的日期范围是否与存储在数据库中的任何其他对象的日期范围重叠。如果是,我无法将其保存在数据库中,但如果不是,我可以。

任何人都知道如何做到这一点?

4

3 回答 3

9

下面相当于加里的建议

select   count(1)
from     YourTable
where    (@start < End and @end > Start)
于 2009-11-15T12:06:18.547 回答
4

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

您实际向数据库发出此查询的方式取决于您目前进行数据访问的方式。

于 2009-11-15T11:23:10.320 回答
2

最简单的重叠检查是查看新事件是否在另一个事件结束之前开始,并在它开始之后结束。如果两个条件都为真,则新事件与旧事件重叠。

select   *
from     YourTable
where    @start < End and @end > Start
于 2009-11-15T12:08:58.243 回答