我正在尝试在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#中做到这一点。
答案 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。只需添加一天或修改传递给查询的日期即可包含正确的时间。