MySQL 查找 2 个输入日期在 start_date 和 end_date 之间相交的交集
MySQL Finding intersection where 2 entered dates intersect between a start_date and end_date
我正在尝试查找 2 个输入的日期是否在开始 date/time 和结束 date/time 之间有交集。
我的数据库中的示例table“预订”我们有一行包含以下内容
start_date = 2022-02-28 09:00:00
end_date = 2022-02-28 11:00:00
我想构建一个查询,当我传入以下输入时我可以select这一行
开始日期 = 2022-02-28 08:30:00
结束日期 = 2022-02-28 12:30:00
现在,此过滤器应该 select 与 date/time 相交的任何行。我构建了以下查询,但是,这不是 select 我想要的交集。我可以做些什么来调整以下查询吗?此查询在大多数情况下有效(当日期确实在 start/end 日期内时)但不会像这样进行任何交集。此查询在大多数情况下都有效,但不适用于这种情况。
SELECT
rp.product_id
FROM
reservation r
INNER JOIN reservation_product AS rp ON r.reservation_id = rp.reservation_id
WHERE
(
'2022-02-28 08:30:00' BETWEEN r.start_date
AND r.end_date
)
OR (
'2022-02-28 12:30:00' BETWEEN r.start_date
AND r.end_date
)
示例数据 - 下面的输入应该 select 正方形中的那一行。
开始日期 = 2022-02-28 08:30:00
结束日期 = 2022-02-28 12:30:00
如果 start_date
小于两个日期中的最大值且 end_date
大于两个日期中的最小值,则可以找到交集:
WHERE r.end_date >= '2022-02-28 08:30:00'
AND r.start_date <= '2022-02-28 12:30:00'
区间A、B相交条件为A.start<=B.End AND B.start <= A.End
..
WHERE
(
'2022-02-28 08:30:00' < r.end_date
)
AND (
'2022-02-28 12:30:00' > r.start_date
)
我正在尝试查找 2 个输入的日期是否在开始 date/time 和结束 date/time 之间有交集。
我的数据库中的示例table“预订”我们有一行包含以下内容
start_date = 2022-02-28 09:00:00
end_date = 2022-02-28 11:00:00
我想构建一个查询,当我传入以下输入时我可以select这一行
开始日期 = 2022-02-28 08:30:00
结束日期 = 2022-02-28 12:30:00
现在,此过滤器应该 select 与 date/time 相交的任何行。我构建了以下查询,但是,这不是 select 我想要的交集。我可以做些什么来调整以下查询吗?此查询在大多数情况下有效(当日期确实在 start/end 日期内时)但不会像这样进行任何交集。此查询在大多数情况下都有效,但不适用于这种情况。
SELECT
rp.product_id
FROM
reservation r
INNER JOIN reservation_product AS rp ON r.reservation_id = rp.reservation_id
WHERE
(
'2022-02-28 08:30:00' BETWEEN r.start_date
AND r.end_date
)
OR (
'2022-02-28 12:30:00' BETWEEN r.start_date
AND r.end_date
)
示例数据 - 下面的输入应该 select 正方形中的那一行。
开始日期 = 2022-02-28 08:30:00
结束日期 = 2022-02-28 12:30:00
如果 start_date
小于两个日期中的最大值且 end_date
大于两个日期中的最小值,则可以找到交集:
WHERE r.end_date >= '2022-02-28 08:30:00'
AND r.start_date <= '2022-02-28 12:30:00'
区间A、B相交条件为A.start<=B.End AND B.start <= A.End
..
WHERE
(
'2022-02-28 08:30:00' < r.end_date
)
AND (
'2022-02-28 12:30:00' > r.start_date
)