2012-06-06 120 views
4

我的桌子上有一個DATETIME列,用於存儲創建記錄的時間。我只想選擇在特定日期創建的記錄。如果我嘗試:如何僅使用日期從DATETIME列中進行選擇?

SELECT * 
FROM myTable 
WHERE postedOn = '2012-06-06' 

它不返回行,即使有與postedOn集表中的許多行作爲 2012-06-06 21:42:022012-06-06 07:55:17,等等。

任何想法?

+0

你原來的代碼不會工作的原因是因爲沒有日期等於'2012-06-06 00:00:00',使用Date(),如其他人所建議的那樣,這些值將刪除時間信息並作出比較返回結果。 – ToddBFisher

+0

你總是可以用這個技巧截斷'datetime'的時間:'CAST(FLOOR(CAST(some_datetime AS FLOAT))AS DATETIME)' - 我的最愛之一。便於報道日常累積。 – bluevector

回答

10

使用DATE標:

SELECT * 
FROM myTable 
WHERE date(postedOn) = '2012-06-06' 
+0

如果有很多記錄,這可能會使查詢變慢嗎? –

+0

否。更糟糕的是:保留兩個字段,一個是日期,另一個是時間。 –

+0

@tony在維護方面更糟,但性能如何? –

1

加入了一天的日期創建一個時間段:

SELECT * 
FROM myTable 
WHERE postedOn >= '2012-06-06' and postedOn < '2012-06-07' 

這是最有效的方式,因爲查詢可以在該字段上使用索引。

+0

需要做第二次查詢來做這個SELECT DATE_ADD($ oldDate,interval 1 day)'或者計算第二天的日期的等價物,所以與使用'date() ' –

+0

@ClickUpvote:計算下一個日期只進行一次,然後可以直接將該值與索引進行比較。使用date()意味着它必須使用表掃描來計算表中每個值的日期值。 – Guffa

相關問題