MySQL查询以检查日期间隔的一部分是否包含在另一个日期间隔内

时间:2018-12-26 16:18:36

标签: mysql

给出MySQL表:

occupied_room_dates

id (int)     date_a (DATE)       date_b (DATE)
1            2018-12-20          2018-12-25
5            2019-01-05          2019-02-15
36           2019-01-02          2019-03-21

并给出两个变量,它们包含格式为yyyy / mm / dd的日期字符串:

DT_A = yyyy/mm/dd (Example: 2019-02-03)
DT_B = yyyy/mm/dd (Example: 2019-05-03)

我要执行查询以检查给定的DT_A和DT_B(即DT_A occupied_room_dates 中至少有一行日期间隔为

>

a) [date_a-date_b]
b) [DT_A-DT_B]

彼此重叠。

示例/期望

在示例中,对于ROOM_ID = 36,它应该返回示例表中的第三行,因为日期间隔重叠。

对于另一个示例(ROOM_ID = 36,DT_A = 2019-06-15,DT_B = 2019-07-15),应该没有匹配项,因为没有日期间隔重叠。

到目前为止,我尝试过的是

由于发生重叠的一般方式有四种,因此我创建了四个条件来触发警报:

"SELECT `date_a`,`date_b` FROM `occupied_room_dates`
WHERE `id`='".ROOM_ID."' AND 
(
    (`date_a`<='".DT_A."' AND `date_b`>='".DT_A."')
    OR (`date_a`<='".DT_B."' AND `date_b`>='".DT_B."')
    OR (`date_a`>='".DT_A."' AND `date_b`<='".DT_B."')
    OR (`date_a`<='".DT_A."' AND `date_b`>='".DT_B."')

) LIMIT 1"

但是在包含相当数量的行的真实表上尝试此操作,它无法按预期工作。而且我在可视化所有必须满足的条件以及在单个MySQL查询中表示这些条件时遇到了麻烦。

此操作的目的是检查房间是否在日期间隔内被占用。您能帮我查询一下吗?

1 个答案:

答案 0 :(得分:0)

说明:

您的代码似乎很正确。但是,由于您仅从一个表中获取数据,因此就不需要recieves()。我不明白从3列中到底要输出什么,所以我选择了*,如果只需要RoomID,请改用Where ID = "Room_ID"

代码:

SELECT id FROM occupied_room_dates