2012-03-26 160 views
2

列名rcvdate,該值是這樣的:檢索日期部分從其中有日期時間類型

2009-10-20 10:00:00 

我想要做一個選擇,我的查詢:

SELECT * 
FROM data 
WHERE rcvdate = '2009-10-20' 

不工作,我期待可運行的查詢,因爲我檢查了很多查詢,但他們沒有工作。

回答

7

覈對的時間間隔,如果你想爲一天中的所有行:

SELECT * 
FROM data 
WHERE rcvdate >= '20091020' AND 
     rcvdate < DATEADD(day, 1, '20091020') 

從SQL Server 2008中,你可以使用它代替:

SELECT * 
FROM data 
WHERE CAST(rcvdate as DATE) = '2009-10-20' 

Cast to date is sargable but is it a good idea?

+0

第一種方法不具有在列的函數=更好的性能 – gbn 2012-03-26 08:01:38

+0

@gbn - 鑄造'datetime'迄今爲止是可優化搜索。你的意思是它速度慢嗎? – 2012-03-26 08:58:52

+0

哦。它現在是可挖掘的嗎? – gbn 2012-03-26 10:01:18

2
SELECT * FROM data WHERE CONVERT(rcvdate, date) = '2009-10-20' 

您應該將日期時間字段轉換爲日期字段,因爲在你的查詢「2009-10-20」轉換爲日期時間「2009-10-20 00:00:00」

UPD:

SELECT * FROM data WHERE CAST(rcvdate AS date) = '2009-10-20' 

將有相同的結果。

1

您可以在下面去方式,它始終有效,謝謝

SELECT * FROM data WHERE 
    DATEDIFF(dd,0,rcvdate) 
     BETWEEN DATEDIFF(dd,0,'2009-10-20') AND 
     DATEDIFF(dd,0,'2009-10-20') 

這裏是參考,你可以用不同的方式來轉換日期。 http://www.sqlusa.com/bestpractices/datetimeconversion/

由於

相關問題