在我写的程序中我正在创建一些具有开始日期(带有日期选择器)和结束日期(也带有日期选择器)的对象。 现在我需要检查此对象的日期范围是否与存储在数据库中的任何其他对象的日期范围重叠。如果确实如此,我无法将其保存在数据库中,但如果不能,我可以。
任何人都知道如何做到这一点?
答案 0 :(得分:8)
下面相当于Garry的建议
select count(1)
from YourTable
where (@start < End and @end > Start)
答案 1 :(得分:4)
您有3种重叠方案:包含start,包含end和wraps范围。这可以用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 */
您实际向数据库发出此查询的方式取决于您目前是如何进行数据访问的。
答案 2 :(得分:2)
最简单的重叠检查是查看新事件是否在另一个事件结束之前开始,并在开始之后结束。如果两个条件都为真,则新事件与旧事件重叠。
select *
from YourTable
where @start < End and @end > Start