TSQL:查询之间的日期 - 忽略时间

时间:2011-12-12 17:06:52

标签: sql-server tsql

我正在尝试在2个日期之间进行查询。我想这样做而不必担心时间。当用户输入他们想要搜索的2个日期时,没有时间选择。这意味着他们输入的日期默认为12:00 AM。

表中的日期确实有时间。我只是想忽略所有时间,所以搜索会带回所述日期范围内的任何记录。

这是我的SQL:

TheDate BETWEEN @EnteredBeginDate AND @EnteredEndDate

因此,当用户在8/6/2009和9/9/2009之间进行范围搜索时,我想返回记录:

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#中做到这一点。

5 个答案:

答案 0 :(得分:10)

只需使用DATEADD将enddate设置为NEXT日的午夜......

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

如果你想要非常精确,你可以减去一秒或毫秒,使其在你指定的日期11:59:59:

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

答案 1 :(得分:7)

如果您使用的是SQL Server 2008 2008 R2 ,则可以使用新的DATE数据类型:

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

剥离时间部分,仅查看日期

答案 2 :(得分:3)

如果您使用的是SQL Server 2008,请执行以下操作:

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

答案 3 :(得分:1)

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

答案 4 :(得分:0)

如果仅将日期传递到SQL Server,则会将时间设为12:00 AM。因此,between子句的结束日期是9/9/2009 12:00 AM。只需添加一天或修改传递给查询的日期即可包含正确的时间。