首页 > 解决方案 > MySQL检查是否采用日期间隔

问题描述

我有一个数据库表,其中包含很多行,其中包含格式为“YYYY-mm-dd”的 start_date 和 end_date

并且不希望一个被占用的时期被重叠,或围绕一个被占用的时期

Row 1: start_date 2020-07-01 , end date 2020-15-07

Row 2: start_date 2020-06-14 , end date 2020-06-29

如果我使用新的 start_date 2020-06-13 和 end_date 2020-06-30 进行测试,则应返回第 2 行

如果我使用新的 start_date 2020-06-16 、 end_date 2020-06-30 进行测试,则应返回第 2 行。

如果我使用 2020-06-27 和 end_date 2020-07-02 进行测试,则应返回第 1 行和第 2 行

那是怎么做的,我无法理解它。

标签: mysql

解决方案


这只是重叠范围问题的一种变体。你可以考虑:

SELECT *
FROM yourTable
WHERE end_date >= new_start AND start_date <= new_end;

例如,要使用您提供的示例数据,您可以尝试:

SELECT *
FROM yourTable
WHERE end_date >= '2020-06-13' AND start_date <= '2020-06-30';

演示


推荐阅读