具有日期范围的Mysql查询

时间:2015-02-02 19:31:55

标签: mysql datetime

我有一张像这样的表:

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

我想选择给定日期时间的项目(例如: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

在此示例中,我想在日期为2015-01-31,2015-02-01和2015-02-02时选择项目 A1 。当日期为2015-02-04时 A2

2 个答案:

答案 0 :(得分:1)

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

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';

答案 1 :(得分:0)

删除第二个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,因为您的解决方案会包含所有在第二天结束的商品。

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