2014-02-22 449 views
7

我有一個存儲過程,應該獲取日期等於當前日期或將來的所有記錄。 日期保存在targetDate列中,並格式化爲日期時間。 我相應的WHERE子句如下:SQL Server:使用GETDATE()比較datetime日期()

WHERE A.targetDate >= GETDATE() 

一般來說我的存儲過程能正常工作,我唯一的問題是,如果targetDate等於當前日期的所有日期與設置爲零的時間保存如下,即:

2014-02-22 00:00:00.000 

怎麼辦我必須改變我的WHERE子句,這樣只考慮日期,但忽略了保存它,這樣我得到任何記錄,同時,即使在時間已過當前日期時間?非常感謝任何幫助,Tim。

+0

採取任何指標優勢的SQL Server版本,有? –

+0

我有SQL Server版本2008 – user2571510

回答

20

更改爲:

WHERE A.targetDate >= cast(GETDATE() as date) 

編輯 - 因爲targetdate還包含時間,是的,格式都是這樣的:

WHERE cast(A.targetDate as date) >= cast(GETDATE() as date) 

編輯 - 給出意見重新:性能,可以試試:

WHERE a.targetdate >= cast(cast(getdate() as date) as datetime) 

最後編輯應該給你同樣的結果和targetdate

+0

謝謝 - 這對我不起作用。我還必須格式化targetDate嗎? – user2571510

+1

如果它是日期字段,則不是。它是時間戳還是日期字段? –

+0

這是一個日期時間字段,但輸入始終只是一個日期,這就是爲什麼它像上面的示例中那樣添加零的原因。 – user2571510

2

下應該給你當前的日期,沒有時間:

SELECT DATEADD(dd,0,DATEDIFF(dd,0,GETDATE())) 

這應該是你的最後一行:

WHERE A.targetDate >= DATEADD(dd,0, ATEDIFF(dd,0,GETDATE())) 
+1

使用第二個'SELECT'是一個語法錯誤。不需要子查詢,只需刪除'SELECT'即可。並將'ATEDIFF'換成'DATEDIFF'; – MatBailie

+0

謝謝。這是上面一行中的複製/粘貼錯誤;我修好了它。 – Preli