首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找与给定到达/离开日期相冲突的预订

查找与给定到达/离开日期相冲突的预订
EN

Stack Overflow用户
提问于 2018-09-20 19:24:04
回答 2查看 130关注 0票数 2

我有一个名为Bookings的表,其中包含以下列:

代码语言:javascript
复制
RoomId (int)
ArrivalDate (datetime)
DepartureDate (datetime)

我遇到的问题是检查已经创建的预订。下面是一些例子。

预订1 -1晚

ArrivalDate = 17/09/2018

DepartureDate = 18/09/2018

预订2 -2晚

ArrivalDate = 18/09/2018

DepartureDate = 20/09/2018

预订3 -4晚

ArrivalDate = 21/09/2018

DepartureDate = 25/09/2018

这就使得2018年9月20日到2018年9月21日的一晚预订就可以使用了。

我的奋斗之处是找到正确的查询来对抗以下情况。

预订4 -3晚

ArrivalDate = 20/09/2018

DepartureDate = 23/09/2018

这将失败,因为预订3已经采取了21/09/2018年和22/09/2018年。

预订5 -7晚

ArrivalDate = 20/09/2018

DepartureDate = 27/09/2018

这将失败,因为预订3已经采取了21/09/2018,22/09/2018,23/09/2018和24/09/2018年。但是,2018年9月25日和2018年9月26日

我已经编写了一个函数,尽管它目前正在失败,以检查是否可以预订。

代码语言:javascript
复制
var o = await dc.Bookings.Where(c =>
    c.RoomId == roomId && c.IsDeleted == false  &&
    (c.ArrivalDate > arrivalDate && c.DepartureDate < departureDate)).CountAsync();

Select * From Bookings Where RoomId = 1 And
    (ArrivalDate Between '2018-09-20 00:00:00.000' And '2018-09-21 00:00:00.000') Or
    (DepartureDate Between '2018-09-20 00:00:00.000' And '2018-09-21 00:00:00.000') Or
    (ArrivalDate >= '2018-09-20 00:00:00.000' And DepartureDate <= '2018-09-21 00:00:00.000')

我一整天都在做这件事,一直没能弄清楚。任何指向正确方向的指示都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-20 20:02:36

此查询将查找与指定到达日期和出发日期重叠的预订。它假定出发日期是排他性的(即客人可以在前一位客人离开的当天到达):

代码语言:javascript
复制
SELECT *
FROM Bookings
WHERE RoomId = 1 AND @DepartureDate > ArrivalDate AND DepartureDate > @ArrivalDate
-- @Arrival/Departure dates are the ones you want to check

你在这里做的三个测试

有了这个查询,找到可用的房间就很简单了。

票数 1
EN

Stack Overflow用户

发布于 2018-09-20 19:41:35

如果您同时需要其他预订:

代码语言:javascript
复制
Select b.*
From Bookings
Where RoomId = 1 And 
      ArrivalDate <= '2018-09-21' and
      DepartureDate >= '2018-09-20';

逻辑很简单。两个周期重叠,如果一个开始于第二个结束或之前。第一个结束于第二个开始或之后。这假设期间包含终结点。如果<= (到<)和>= (到>)是排他性的,您可以调整它们。

如果没有返回记录,则这段时间(2018-09-20 - 2018-09-21)可以免费进行新的预订。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52431949

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档