Mysql 查询日期范围

Mysql query with range of dates

我有一个像这样的table:

Items    start_datatime         end_datatime
A1       2015-01-31 10:00:00    2015-02-02 20:30:00
A2       2015-02-04 16:00:00    2015-02-04 16:30:00

而且我想 select 给定日期时间(例如:2015-02-02)的项目。

所以,我正在尝试这个查询:

SELECT Items FROM table WHERE start_datatime >= 2015-02-02 00:00:00
AND end_datatime < 2015-02-03 00:00:00

在这个例子中,我想 select item A1 when date is 2015-01-31, 2015-02-01 and 2015-02-02. A2 当日期是 2015-02-04 时。

删除第二个 WHERE,它应该可以工作:

SELECT Items FROM table WHERE start_datatime >= 2015-02-02 00:00:00 AND end_datatime <= 2015-02-02 00:00:00

为了改进它,我会将 end_datatime <= 2015-02-02 00:00:00 更改为 end_datatime < 2015-02-02 00:00:00,因为您的解决方案将包括所有在第二天结束的项目。

还要考虑在那天之前开始并在那天之后结束的项目。他们应该被排除在外吗?在您的解决方案中,这会发生。

如果您想要任何在该日期重叠的记录,逻辑将是:

SELECT Items
FROM table
WHERE start_datatime <= '2015-02-03 00:00:00' AND
      end_datatime >= '2015-02-02 00:00:00';

如果您想要完全重叠,那么整个时间段都包括这一天:

SELECT Items
FROM table
WHERE start_datatime <= '2015-02-02 00:00:00' AND
      end_datatime >= '2015-02-03 00:00:00';

而且,如果您只关心一天开始时的午夜:

SELECT Items
FROM table
WHERE start_datatime <= '2015-02-02 00:00:00' AND
      end_datatime >= '2015-02-02 00:00:00';