2011-12-12 111 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)