首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何有条件地选择MySQL中的前/后日期?

问如何有条件地选择MySQL中的前/后日期?
EN

Stack Overflow用户
提问于 2020-04-09 07:21:10
回答 1查看 61关注 0票数 0

我有一个表,希望得到符合特定条件的行。

假设我有这一排:

代码语言:javascript
复制
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。

下面是我当前的查询:

代码语言:javascript
复制
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。

我也尝试过(大于和等于):

代码语言:javascript
复制
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实现行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-09 07:31:52

您正在尝试查找其开始日期和结束日期与已知范围重叠的记录。这是重叠范围问题,您可以尝试:

代码语言:javascript
复制
SELECT *
FROM slots
WHERE
    start_date < '2020-05-09' AND
    (end_date > '2020-03-29' OR end_date IS NULL);

这意味着有效范围在已知范围的结束日期之前开始,并且在已知范围的开始日期之后结束,即它位于该已知范围内。

请注意,MySQL中的日期文本采用单引号,因此您也需要修复它。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61115909

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档