所以我正在制作一个简单的预订系统,C#和sql。 我有datetimepicker 1和datetimepicker 2。 对于前者datetimepicker = aug 1 2009和datetimepicker2 = aug 3 2009由用户保存在sql中。
如何处理,以便下一个试图获得日期1-3的客户将被迫选择另一个日期?
答案 0 :(得分:0)
您可以运行如下的查询:
select count(*) as cnt
from reservations t
where
not
(
(@dtTo <= t.DateFrom)
or
(@dtFrom >= t.DateTo)
)
假设@dtFrom,@ dtTo是第二个用户选择的日期,并假设为
您有一个reservations
表,其中包含DateFrom
和DateTo
列。
这背后的想法是什么:
两段时间[dateFrom1, dateTo1]
和[dateFrom2, dateTo2]
不是
当且仅在以下情况下,对于此基于预订的方案存在冲突(即不重叠):
dateTo1 <= dateFrom2 or dateFrom1 >= dateTo2
(把它画在一张纸上,你会明白为什么)
所以如果否定了
not ( dateTo1 <= dateFrom2 or dateFrom1 >= dateTo2 )
是的,这两个部分是重叠/冲突的。