日期范围查询MySQL

时间:2010-01-05 17:40:55

标签: php datetime mysql date-range

我需要一个查询来选择两个日期之间的数据,并将今天的日期作为参考。

数据库具有“start”的日期时间字段和“end”的日期时间字段。

$todays_date = date("Y-m-d H:i:s");

$q = "SELECT * FROM news WHERE `end` >= '" .  $todays_date . "' AND `start` >= '" .  $todays_date . "' ORDER BY id DESC";

问题是查询仍在拉开结果,其中开始日期大于今天。那么我修改我的查询看起来像这样:

 $q = "SELECT * FROM news WHERE `end` >= '" .  $todays_date . "' AND `start` >= '" .  $todays_date . "' AND `start` <='" . $todays_date . "' ORDER BY id DESC";

这是使用今天日期作为限制器的两个日期时间字段之间选择数据的正确方法吗?

由于

5 个答案:

答案 0 :(得分:5)

您可以使用MySQL中的now timedate函数和BETWEEN运算符。

原始SQL:

SELECT * FROM news
WHERE NOW() BETWEEN start AND end;

注意:请注意默认时区,它会影响提供MySQL资源的服务器使用的NOW()函数。

答案 1 :(得分:2)

在这两种情况下你都有&gt; =。

答案 2 :(得分:0)

您可以使用mysql函数curdate()将日期作为2010-01-05或now()来获取完整的日期时间格式2010-01-05 12:55:09。这取决于您是否想要查找从今天开始或立即开始的项目。

假设您没有任何条目在开始之前结束,您可以将查询重写为

select * from news where start = curdate()

仔细检查结束日期可能是个好主意。而且您似乎正在寻找已经开始但尚未结束的新闻文章列表,因此查询看起来像这样

select * from news where start < now() and end > now()

你甚至可以做到这一点,虽然我还没有测试过它

select * from news where now() between start and end

您的里程可能会有所不同。

- 标记

答案 3 :(得分:0)

感谢大家,我最终使用了:

select * 
from news 
where start = curdate()

我试过

SELECT * 
FROM news 
WHERE NOW() BETWEEN start AND end;

它几乎正常工作。它不想显示同时在同一天开始和结束的新闻文章。

-tegan

答案 4 :(得分:0)

这对我有用。 select * from news where start between '$range1' and '$range2'