2011-12-12 123 views
10

我正在嘗試執行2個日期之間的查詢。我想這樣做,而不必擔心時間。當用戶輸入他們想要搜索的日期時,沒有時間選擇。這意味着他們輸入的日期默認爲12:00 AM。TSQL:日期BETWEEN查詢 - 忽略時間

表中的日期確實有時間。我只是想一起忽略所有的時間,所以搜索會從日期範圍中恢復任何記錄。

這裏是我的SQL:

TheDate BETWEEN @EnteredBeginDate AND @EnteredEndDate 

因此,當用戶執行2009/8/6 2009/9/9及的範圍內搜索我要返回記錄:

8/6/2009 11:33:02 AM 
8/6/2009 11:39:17 AM 
9/9/2009 8:21:30 AM 

現在發生了什麼是我只回來:

8/6/2009 11:33:02 AM 
8/6/2009 11:39:17 AM 

有人可以請推薦最好的方式來做到這一點在SQL?我知道如何在C#中完成它。

+0

什麼** **版本的SQL Server? –

回答

10

只需使用DATEADD的結束日期將其設置爲午夜第二天...

TheDate BETWEEN @EnteredBeginDate AND DATEADD(day, 1, @EnteredEndDate)

如果你想成爲真正的精確,你可以減去第二個或從毫秒這使它在11:59:59指定日期:

TheDate BETWEEN @EnteredBeginDate AND DATEADD(second, -1, (DATEADD(day, 1, @EnteredEndDate)))

+0

這將是我選擇的答案。 +1爲準確的選項。感謝大家! – Jared

1
TheDate BETWEEN @EnteredBeginDate AND dateadd(day, 1, @EnteredEndDate) 
+3

如果您發佈代碼,XML或數據樣本,請**在文本編輯器中突出顯示這些行,然後單擊編輯器工具欄上的「代碼示例」按鈕(「{}」)以精確地設置格式並對其進行語法突出顯示! –

7

如果你的SQL Server上或2008 R2,你可以使用新的DATE數據類型:

TheDate BETWEEN CAST(@EnteredBeginDate AS DATE) AND CAST(@EnteredEndDate AS DATE) 

這剝去時間部分,看起來只有在指定的日期

+0

這太好了。但我必須使用2005年。 – Jared

0

如果只是日期傳遞到SQL Server,它會使時間凌晨12:00。所以,between子句的結束日期是9/9/2009 12:00 AM。只需添加一天或修改傳入查詢的日期以包含正確的時間。

3

如果您在使用SQL Server 2008,那麼這樣做:

TheDate BETWEEN cast(@EnteredBeginDate as date) AND cast(@EnteredEndDate as date)