Mysql查询 - 返回两个日期范围相交的日期

Posted

技术标签:

【中文标题】Mysql查询 - 返回两个日期范围相交的日期【英文标题】:Mysql query - Return dates where two date ranges intersect 【发布时间】:2021-01-26 20:21:40 【问题描述】:

我正在尝试编写一个 mysql 查询,其中两个日期范围相交。

例如,我想从存在给定日期的表中返回一行。

所以我的用户可以选择两个日期'startdate','enddate'

我有一个查找表

id, fromdate, tildate

在这张表中我有 2 行

id:1, fromdate:'2021-01-03', tildate:'2021-01-05'
id:2, fromdate:'2021-01-05', tildate:'2021-01-08'

现在如果用户使用值查询数据库:

startdate: '2021-01-01',  enddate '2021-01-02' - Should return nothing
startdate: '2021-01-03',  enddate '2021-01-04' - Should return 1, since there is an intersection
startdate: '2021-01-02',  enddate '2021-01-06' - Should return id 1 and 2, since there is an intersection in both
startdate: '2021-01-05',  enddate '2021-01-05' - Should return id 1 and 2, since there is an intersection in both
startdate: '2021-01-07',  enddate '2021-01-08' - Should return 2, since there is an intersection

我试过这个查询

SELECT 
   id, fromdate, todate FROM table_name 
WHERE 
    ('2021-01-02' >= fromDate
     AND '2021-01-02' <= toDate)
OR
    ('2021-01-06' >= fromDate
    AND '2021-01-06' <= toDate)

这不起作用。

希望这是有道理的

【问题讨论】:

你不是要在 where 子句中使用 todate 字段,而不仅仅是 fromdate 吗? 【参考方案1】:

试试这个:

SELECT *
FROM table_name 
WHERE 
    ('2021-01-02' >= fromDate
     AND '2021-01-02' <= toDate)
OR
    ('2021-01-06' >= fromDate
    AND '2021-01-06' <= toDate)

您在查询中到处使用fromDate,这可能是问题所在

【讨论】:

时间的一个有用特性是它只向一个方向移动。

以上是关于Mysql查询 - 返回两个日期范围相交的日期的主要内容,如果未能解决你的问题,请参考以下文章

MySQL:选择两个日期范围内的所有数据

(My)SQL:如果子查询不是空集,则返回子查询

My97DatePicker选择两个日期范围不超过30天的demo

MySQL 计算两个参数

3个日期范围之间的Mysql查询

检查两个日期间隔是不是相交