2012-11-10 55 views
1

我運行此查詢:與MySQL日期比較不正確的結果

SELECT COUNT(*) as num FROM items 
WHERE status='public' 
AND DATE(dateCreated) >= '01-01-2012' 
AND DATE(dateCreated) <= '31-12-2012' 

要獲得所有在2012年加入的結果的項目數:629

但是如果我更改年至2011年,我得到完全相同的結果。

如果我完全刪除日期比較,只是做:

SELECT COUNT(*) AS num 
FROM items 
WHERE STATUS = 'public' 

這也給了629行的結果,即使有項目從2009-2012表中添加了所有的方式,每年都應該給出不同的數字。

我在做什麼錯?

dateCreated列是日期時間列。

回答

1

如果列被聲明爲日期時間,那麼可以使用日期的yyyy-MM-dd格式或日期時間的yyyy-MM-dd HH:mm:ss來比較日期。

SELECT COUNT(*) as num FROM items 
WHERE status='public' 
AND dateCreated >= '2012-01-01' 
AND dateCreated <= '2012-12-31' 

如果您使用DATE()函數和比較反對您的格式的日期,實際上是比較字符串按字母順序,因此與格式DD-MM-YYYY任何日期將開始與1和3之間的數字。

+0

唉,謝謝。我不能相信我忘了那個。 –

1

試試這個查詢,而不是:

SELECT COUNT(*) as num FROM items 
WHERE status='public' 
AND dateCreated >= '2012-01-01' 
AND dateCreated <= '2012-12-31' 

從MySQL的docs

DATETIME類型用於包含日期和時間部分的值。 MySQL檢索並顯示'YYYY-MM-DD HH:MM:SS'格式的DATETIME值