如何 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'
);
我正在尝试 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'
);