SQL两个日期之间的所有日子

时间:2016-10-12 13:06:23

标签: mysql sql date

我目前正在尝试从我们的某个数据库中挑选出一些查询。 给我提出问题的表几乎如下:

id   | bookingStartDate | bookingEndDate | bookingLength |  customerID | roomNumber
-----------------------------------------------------------------------------------
310  | 2016-11-10       | 2016-11-17     |     7         |    004943   |    583
443  | 2017-01-15       | 2016-11-29     |     14        |    008745   |    345  

我想要实现的是在特定时间窗口内提供特定房间的可用性。 数据当前存储的方式,我可以访问预订的开始和结束以及预订将持续的夜晚。

我要做的是创建一个查询,以检查特定房间的可用性,并提供一系列日期,例如从11月10日到2016年11月20日。

为了解决这个问题,我尝试用这个连接日历表并过滤房间号码。然而,加入依赖于bookingStartDate或者结束,我不知道如何继续获取数据以显示房间也被占用时两者之间的日子。

任何帮助或建议都会非常有用!

1 个答案:

答案 0 :(得分:0)

使用日历表:

set @PeriodStart = '2016-01-01';
set @PeriodEnd = '2017-12-31';
set @Room = 583;

select Ca.Date,
       Bo.RoomNumber,
       Bo.CustomerID

from Calendar Ca
left join Booking Bo
    on Ca.Date between Bo.StartDate and Bo.EndDate

where Ca.Date between @PeriodStart and @PeriodEnd
and RoomNumber = @Room ;

这将显示@PeriodStart和@PeriodEnd之间的所有日期,以及该房间期间的所有预订