2016-07-28 108 views
-1

我想在兩個日期之間對SQL Server中的datetime對象進行排序。當我運行它時,它已經過濾了結果但不正確。SQL Server日期時間排序

我的代碼是

where 
    cast(tbRegistrant.DateEntered as date) >= cast('2015-07-01' as date) 
    and tbRegistrant.DateEntered <= cast('2016-06-30' as date) 

回來的結果將是

2008-08-06 14:14:55.000 
2015-06-09 10:18:02.000 
2014-11-25 14:18:24.000 
2014-11-24 14:11:23.000 
2014-11-24 14:06:14.000 
2015-01-30 13:41:25.000 
2008-08-06 13:23:58.000 
2014-06-19 12:22:27.000 
2014-11-25 15:30:15.000 
2014-11-25 08:13:52.000 
2014-11-24 14:12:55.000 
2015-07-13 08:20:28.000 
+0

當你說 「之類的」 你的意思是 「過濾器」?另外,「不正確」是什麼意思? –

+1

你會得到什麼結果?他們以什麼方式不被正確排序?請發佈您的原始數據和您的排序結果。 –

+0

是篩選並返回兩個指定日期之間的隨機日期而不是日期 – DennisOakdale

回答

2

你的第二個條件犯規包括CAST。應該是:

where cast(tbRegistrant.DateEntered as date) >= cast('2015-07-01' as date) 
    and cast(tbRegistrant.DateEntered as date) <= cast('2016-06-30' as date); 

OR

where cast(tbRegistrant.DateEntered as date) 
     BETWEEN cast('2015-07-01' as date) and cast('2016-06-30' as date); 

但更好的是,你的約會保存爲DATETEXT。現在你不能使用任何索引進行搜索。

編輯:

DEMO與OP 「錯誤的」 數據查詢帶來正確的過濾器。所以也許還有別的。

enter image description here

如果你的領域是datetime你不需要CAST

SELECT * 
FROM myTable 
where [DateEntered] >= cast('2015-07-01' as date) 
    and [DateEntered] <= cast('2016-06-30' as date); 
+0

他們被保存爲數據庫中的日期時間..並且該語法不起作用。 – DennisOakdale

+1

「你的語法不起作用」是什麼意思?你會得到一個錯誤,如果是,哪個? –

+0

@DennisOakdale你有什麼錯誤? CAST適用於2008年及以後。 – scsimon

0

嘗試

where cast(tbRegistrant.DateEntered as date) >= cast('20150701' as date) 
    and CAST(tbRegistrant.DateEntered) <= cast('20160630' as date)