2009-12-19 40 views
0

我的表格使用日期時間(YYYY-MM-DD HH:MM:SS),我需要顯示今天的條目。如何使用mysql測試日期和日期時間

我的代碼只是:

SELECT * 
FROM  table 
WHERE date = '$date' 
ORDER BY score DESC 

$date = date("Y-m-d"); 

良好,預期它不工作:|你們在這裏有一個解決方案?

回答

8

帕斯卡爾·馬丁之後,你可以提取日期部分從日期+時間字段:

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

+0

這是最好的方式來做到這一點=)thx很多 – 2009-12-19 23:02:42

+1

如果我沒有弄錯,像這樣的解決方案,其中有一個「日期」列計算,計算/轉換必須在表格的每一行上進行 - 破壞了使用可能在「日期」列中設置的索引的機會。 – 2009-12-19 23:02:52

+0

@帕斯卡爾:是的,我認爲是。我在答案中加入了澄清......與此同時,我正在檢查MySQL如何處理這個問題,因爲好奇。 – 2009-12-19 23:06:48

3

你的日期是「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 
+0

是不是有一個更美麗的選項來寫呢? thx無論如何,這本來會花費一些思考 – 2009-12-19 22:59:05

+1

胡;我想我不同意「美麗」的定義,我想 - 至少,我不認爲這看起來「醜陋」,但是,呃......;這個解決方案的一個優點是它應該使用你在「日期」列中的索引,如果你有一個(也許你應該)),而一個解決方案轉換「日期」列或做一個計算在它將消除使用索引的abolity。 – 2009-12-19 23:01:17

+0

你的指數是什麼意思? 和由美麗,我發現丹尼爾Vassallo更乾淨的解決方案 – 2009-12-19 23:04:15

0

你可能想,當你選擇它格式化數據:

SELECT *, DATE_FORMAT(date, '%Y-%m-%d') AS dateformat FROM table 
WHERE dateformat = '$date' ORDER BY score DESC 
+0

其顯示unknows列名dateformat – 2017-03-25 12:28:07

0

您比較日期時間和日期的表達,這就是爲什麼它不工作。使用Date()方法從datetime返回日期部分,然後進行比較。 WHERE DATE(date)='$ date'應該這樣做。您可能必須使用別名來處理此名稱衝突。

相關問題