我的表格使用日期時間(YYYY-MM-DD HH:MM:SS)
,我需要顯示今天的條目。如何使用mysql測試日期和日期時間
我的代碼只是:
SELECT *
FROM table
WHERE date = '$date'
ORDER BY score DESC
與
$date = date("Y-m-d");
良好,預期它不工作:|你們在這裏有一個解決方案?
我的表格使用日期時間(YYYY-MM-DD HH:MM:SS)
,我需要顯示今天的條目。如何使用mysql測試日期和日期時間
我的代碼只是:
SELECT *
FROM table
WHERE date = '$date'
ORDER BY score DESC
與
$date = date("Y-m-d");
良好,預期它不工作:|你們在這裏有一個解決方案?
帕斯卡爾·馬丁之後,你可以提取日期部分從日期+時間字段:
SELECT * FROM table WHERE DATE(date) = '2009-12-19'
Source: MySQL - Date and Time Functions
注意然而,這個查詢將不會在你的約會使用索引+如果你將會有一個。 (Stack Overflow: How does one create an index on the date part of DATETIME field in MySql)
你的日期是「2009-12-19」(或類似的東西,取決於一天),它被解釋爲「2009-12-19 00:00:00」。
在您的數據庫中,您可能沒有任何日期完全等同於第二個日期:您的日期與「2009-12-19 12:15:32」類似。
一種解決方案是比較喜歡這樣的:
select *
from table
where date >= '2009-12-19'
and date < '2009-12-20'
將被解釋爲:
select *
from table
where date >= '2009-12-19 00:00:00'
and date < '2009-12-20 00:00:00'
而且,如果你不想做數學得到的日期以下日期,你可以使用adddate
功能:
select *
from table
where date >= '2009-12-19'
and date < adddate('2009-12-19', interval 1 day)
所以,你的情況,東西這樣應該做的伎倆:
select *
from table
where date >= '$date'
and date < adddate('$date', interval 1 day)
order by score desc
是不是有一個更美麗的選項來寫呢? thx無論如何,這本來會花費一些思考 – 2009-12-19 22:59:05
胡;我想我不同意「美麗」的定義,我想 - 至少,我不認爲這看起來「醜陋」,但是,呃......;這個解決方案的一個優點是它應該使用你在「日期」列中的索引,如果你有一個(也許你應該)),而一個解決方案轉換「日期」列或做一個計算在它將消除使用索引的abolity。 – 2009-12-19 23:01:17
你的指數是什麼意思? 和由美麗,我發現丹尼爾Vassallo更乾淨的解決方案 – 2009-12-19 23:04:15
你可能想,當你選擇它格式化數據:
SELECT *, DATE_FORMAT(date, '%Y-%m-%d') AS dateformat FROM table
WHERE dateformat = '$date' ORDER BY score DESC
其顯示unknows列名dateformat – 2017-03-25 12:28:07
您比較日期時間和日期的表達,這就是爲什麼它不工作。使用Date()方法從datetime返回日期部分,然後進行比較。 WHERE DATE(date)='$ date'應該這樣做。您可能必須使用別名來處理此名稱衝突。
這是最好的方式來做到這一點=)thx很多 – 2009-12-19 23:02:42
如果我沒有弄錯,像這樣的解決方案,其中有一個「日期」列計算,計算/轉換必須在表格的每一行上進行 - 破壞了使用可能在「日期」列中設置的索引的機會。 – 2009-12-19 23:02:52
@帕斯卡爾:是的,我認爲是。我在答案中加入了澄清......與此同時,我正在檢查MySQL如何處理這個問題,因爲好奇。 – 2009-12-19 23:06:48