检查两个日期时间选取器之间的冲突

本文关键字:选取 之间 冲突 时间 日期 两个 检查 | 更新日期: 2023-09-27 18:32:42

所以我正在制作一个简单的预订系统,C#和sql。我有日期时间选择器 1 和日期时间选择器 2。例如,datetimepicker = aug 1 2009 和 datetimepicker2 = aug 3 2009 由用户保存在 sql 中。

如何处理,以便下一个尝试获取日期 1-3 的客户将被迫选择另一个日期?

检查两个日期时间选取器之间的冲突

您可以运行如下查询:

select count(*) as cnt
from reservations t
where
not 
(
    (@dtTo <= t.DateFrom)
    or
    (@dtFrom >= t.DateTo)
)

假设@dtFrom,@dtTo是第二个用户选择的日期,并假设
您有一个包含DateFrom列和DateTo列的reservations表。

  • 如果此查询返回 0,则允许第二个用户保存。
  • 如果它返回一个数字> 0,则不允许第二个用户保存。

这背后的想法是什么:
[dateFrom1, dateTo1][dateFrom2, dateTo2]的两个时间段不是
对于此基于预留的方案,当且仅当:

dateTo1 <= dateFrom2 or dateFrom1 >= dateTo2(把它画在一张纸上,你就会明白为什么)。
所以如果否定

not ( dateTo1 <= dateFrom2 or dateFrom1 >= dateTo2 )是真的,这两个段是重叠/冲突的。