如何 select 一个日期,如果它已经在两个值之间 sql 服务器

how to select a date if it is already between two values sql server

我正在尝试 select 在 2 个不同的列中的 2 个不同的日期之间,我认为我知道如何做到这一点,直到我遇到这个问题。我想我最好提供一个例子:

一个房间有一个入住日期和一个退房日期(与酒店问题相关)。我想要 select 个不在 inDate 和 outDate 之间的房间。因此我可以使用这个查询:

select * from room where  inDate and outDate not between '2019-06-19' and '2019-06-26';

让我们假设我们有一个房间 inDate = '2019-06-18'outDate = '2019-06-21'

我的问题是,知道用户不能预订那个房间是因为当时房间不可用,这可能是正确的查询?因为如果我们使用前面提到的查询,那个房间将是可用的,而显然不是。

我在这个页面上看到很多页面都在询问类似的事情,但我尽量不重复。如果这是重复的,请提前道歉,我希望我的解释是正确的。

如果您要查找可用房间,则逻辑如下所示:

select *
from room r
where not (inDate <= '2019-06-26' and
           outDate >= '2019-06-19'
          );

两个时间段(例如房间预订和间隔)在彼此结束之前开始时重叠。 not 是因为你想要没有预订的房间。

其实上面的看起来不太对。您应该有一个 table 用于房间,一个用于预订。然后查询将如下所示:

select r.*
from rooms r
where not exists (select 1
                  from reservations re
                  where re.room_id = r.room_id and
                        re.inDate <= '2019-06-26' and
                        re.outDate >= '2019-06-19'
                 );