2011-03-08 54 views
6

我想寫一個SQL查詢,它應該只選擇具有特定日期而不是時間的計數。在沒有時間的SQL中查詢日期時間

select count(*) from xyz where time='2010-01-21' 

但它沒有返回任何結果。

+0

什麼時間列的字段類型? – 2011-03-09 00:01:14

+0

datetime是數據類型 – alice7 2011-03-09 00:05:54

+0

你在使用什麼RDBMS? – 2011-03-09 00:07:07

回答

4

如果你有一個日期時間字段,你想匹配日期:

select count(*) from xyz where time BETWEEN '2010-01-21' AND '2010-01-22

MYSQL Date Time ref

+0

我已經嘗試過的第一個,它不起作用。 – alice7 2011-03-09 00:04:16

+0

這將導致'time'列被轉換爲一個字符串,因此不會被禁止。 – 2011-03-09 00:04:41

+0

@馬丁:足夠公平,我已經刪除它謝謝 – Jason 2011-03-09 00:10:47

1

嘗試(MySQL的)

SELECT COUNT(*) FROM xyz WHERE DATE(datetime_col) = '2010-01-21' 

在T-SQL(MSSQL)(有點難看,但應工作):

SELECT * FROM xyz WHERE CAST(CONVERT(varchar(8), datetime_col, 112) AS DATETIME) <= '2011-01-21' 
+0

我假設OP是在SQL服務器上,但只是搞砸了標籤。 – 2011-03-09 00:05:54

+0

Im gettihg這個錯誤:'日期'不是一個公認的內置函數名稱。 – alice7 2011-03-09 00:07:18

7

對於SQL Server 2008,你應該能夠使用date數據類型:

select count(*) from xyz where cast(time as date) = '2010-01-21' 
+0

+1我最初評論說,這是非sargable,不能使用索引[但此連接請求](http://connect.microsoft.com/SQLServer/feedback/details/526431/make-more-functions-sargable )說它**實際上是可以通過的(對我來說是新聞!)。 – 2011-03-09 00:30:52