Mysql语句用于选择日期范围中的条目

时间:2015-09-12 19:29:35

标签: mysql

我有一张活动表:

id (int)
day (int)
activity_date (datetime)

我以这种方式添加新活动:

insert into activities values
(null, 1, '2015-01-01 10:00:00'),
(null, 1, '2015-01-01 11:00:00'),
(null, 1, '2015-01-01 12:00:00'),
(null, 2, '2015-01-02 10:00:00'),
(null, 2, '2015-01-02 11:00:00'),
(null, 2, '2015-01-02 12:00:00');

我添加了6个条目。第2天的第1天和第3天的3项活动。 现在,我想要获取当天的所有活动#34;现在"仍然必须发生。 例如:

现在的时间是:

2015-01-01 10:50:00

由于第1天包含的条目是"在范围内" (必须在11:00和12:00进行活动) 我想选择第1天的所有活动。

我尝试在"之间使用"。但就像做

select * from activities where now() between activity_date

给出了sql-error。

编辑:

请注意" day"可以跨越几天。所以条目可以是:

insert into activities values
(null, 2, '2015-09-12 10:00:00'),
(null, 2, '2015-09-12 18:00:00'),
(null, 2, '2015-09-12 20:45:00'),
(null, 2, '2015-09-13 20:45:00');

现在是

2015-09-12 22:45:00

vhu提出的解决方案并不完全有效。他的建议是:

SELECT * FROM activities
WHERE activity_date >= NOW() 
AND DATE(activity_date) = DATE(NOW());

2 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

SELECT * FROM activities
 WHERE activity_date >= NOW() 
  AND DATE(activity_date) = DATE(NOW());

这将为您提供尚未发生但今天仍在进行的所有活动。

答案 1 :(得分:0)

你的问题有点不清楚,但我认为你想要这样的东西......

SELECT DISTINCT x.* 
           FROM activities x 
           JOIN activities y 
             ON DATE(y.activity_date) = DATE(x.activity_date) 
          WHERE DATE(y.activity_date) = DATE('2015-01-01 10:50:00') 
            AND y.activity_date > '2015-01-01 10:50:00';

请注意,对于索引数据,使用范围比较重写此数据会更有效。