2010-01-05 241 views
2

我需要一个查询来选择以今天日期为参考的两个日期之间的数据。日期范围查询MySQL

该数据库具有“开始”的日期时间字段和“结束”的日期时间字段。

$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"; 

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

谢谢

回答

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 

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

--mark

5

你可以在MySQL中使用现在时间日期函数和BETWEEN运营商。

原始SQL:

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

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

0

谢谢大家我最终使用:

select * 
from news 
where start = curdate() 

我试图

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

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

-tegan

0

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