2010-01-05 296 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'