2013-10-08 158 views
0

我有一個日期時間列,我想過濾兩個開始日期和結束日期參數。但是,如果起始日期和結束日期是相同的值,則不會返回行。正如你所看到的actionDate列我actionDate列篩選開始日期和結束日期之間的日期嗎?

2013-10-08 12:30:17.000 
2013-10-08 12:30:17.000 
2013-10-08 12:31:56.000 
2013-10-08 12:32:22.000 
2013-10-08 12:35:35.000 
2013-10-08 12:35:40.000 
2013-10-08 12:35:40.000 
2013-10-08 12:36:03.000 
2013-10-08 12:36:44.000 
2013-10-08 12:36:44.000 
2013-10-08 12:36:54.000 

ua.actiondate < '2013-10-08' and ua.actiondate > '2013-10-08' 

ua.actiondate between '2013-10-08' and '2013-10-08' 

示例值是一個日期時間對象,但參數是唯一的日期。

+1

這些事件都沒有發生在2013年10月8日午夜,所以我不希望任何人要返回。 – RBarryYoung

回答

4

您應該always use an open-ended date rangenever use between

WHERE ua.actiondate >= @startdate AND ua.actiondate < DATEADD(DAY, 1, @enddate); 

這是假設@startdate@enddate也始終沒有時間日期過去了。如果有時間參與(例如,應用程序可能通過now()),那麼你可以四捨五入使用:

WHERE ua.actiondate >= CONVERT(DATE, @startdate) 
    AND ua.actiondate < CONVERT(DATE, DATEADD(DAY, 1, @enddate)); 
+0

這工作,謝謝 – Xerxes

4

由於2013-10-08 12:35:40.0002013-10-08更大,你必須使用類似這樣

where ua.actiondate >= '2013-10-08' and ua.actiondate < '2013-10-09' 
+0

是否可以僅在日期部分過濾? – Xerxes

+0

@xerxes請你詳細說明一下嗎?你的意思是你的參數可能包括時間? –

+0

我的查詢只在日期部分進行過濾。你也可以使用'DATE()'提取日期部分,但不會在你的表上使用索引,這會使它變慢。 –

相關問題