首页 > 解决方案 > MYSQL:过滤多个日期和日期范围

问题描述

我有 2 个日期要按 2 个日期过滤。

我的桌子上有这些数据

id  date_from    date_to     name
1   2018-10-11   2018-10-25  LeBron James
2   2018-10-11   2018-10-25  Stephen Curry
3   2018-10-26   2018-11-10  Kevin Durant

我想做的是根据给定的日期范围过滤它。所以如果我有 2 个日期(2018-10-01 到 2018-10-22)。我只会看到 id 1 和 2,如果有(2018-10-12 到 2018-10-31)我会显示所有数据。

我的示例代码使用 start 和 end 作为范围

 SELECT * FROM table WHERE (date_from BETWEEN @start AND @end) OR (date_to BETWEEN @start AND @end)

// 这样做的问题是,如果在范围内没有找到任何值,它将显示所有内容。

 SELECT * FROM table WHERE (date_from >= @start AND date_from <= @end) AND (date_to >= @start AND date_to <= @end)

// 问题 - 不会出现数据

我该怎么办,我对很多约会感到困惑。

标签: mysqlsql

解决方案


我想你想要和重叠。如果是这样:

SELECT t.*
FROM table
WHERE t.date_from <= @end AND
      t.date_to >= @start;

如果一个时期在第二个结束之前开始,则两个时期重叠,反之亦然。


推荐阅读