我有一个表,希望得到符合特定条件的行。
假设我有这一排:
id start_date end_date
3 2020-04-02 NULL在我的web应用程序UI中,我有一个日历:

当您检查表字段时,您将看到一个start_date和一个end_date。end_date可以是null,这意味着它没有结束。
回到表中,我希望通过从UI中传递startDates和endDates来获取行。startDate将是March 29,endDate将是基于日历视图的May 9。
下面是我当前的查询:
SELECT * FROM slots WHERE start_date <= 2020-03-29 AND (end_date >= 2020-05-09 OR end_date IS NULL)有了上面的代码,我就得不到任何数据了。这显然是因为表中的start_date是2020-04-02,我的查询检查以前的日期,它等于UI中的startDate。
我也尝试过(大于和等于):
SELECT * FROM slots WHERE start_date >= 2020-03-29 AND (end_date >= 2020-05-09 OR end_date IS NULL)当我得到行时,当我单击日历中的next按钮并切换到2020年5月时,我将不再得到该行。我应该得到它,因为end_date是空的。
即使在UI中更改月份时,我也如何使用id 3实现行?
发布于 2020-04-09 07:31:52
您正在尝试查找其开始日期和结束日期与已知范围重叠的记录。这是重叠范围问题,您可以尝试:
SELECT *
FROM slots
WHERE
start_date < '2020-05-09' AND
(end_date > '2020-03-29' OR end_date IS NULL);这意味着有效范围在已知范围的结束日期之前开始,并且在已知范围的开始日期之后结束,即它位于该已知范围内。
请注意,MySQL中的日期文本采用单引号,因此您也需要修复它。
https://stackoverflow.com/questions/61115909
复制相似问题