TSQL:日期BETWEEN查询 - 忽略时间
我正在尝试执行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#中完成它。
只需使用DATEADD
的结束日期将其设置为午夜第二天...
TheDate BETWEEN @EnteredBeginDate AND DATEADD(day, 1, @EnteredEndDate)
如果你想成为真正的精确,你可以减去第二个或从毫秒这使它在11:59:59指定日期:
TheDate BETWEEN @EnteredBeginDate AND DATEADD(second, -1, (DATEADD(day, 1, @EnteredEndDate)))
这将是我选择的答案。 +1为准确的选项。感谢大家! – Jared
TheDate BETWEEN @EnteredBeginDate AND dateadd(day, 1, @EnteredEndDate)
如果您发布代码,XML或数据样本,请**在文本编辑器中突出显示这些行,然后单击编辑器工具栏上的“代码示例”按钮(“{}”)以精确地设置格式并对其进行语法突出显示! –
如果你的SQL Server上或2008 R2,你可以使用新的DATE
数据类型:
TheDate BETWEEN CAST(@EnteredBeginDate AS DATE) AND CAST(@EnteredEndDate AS DATE)
这剥去时间部分,看起来只有在指定的日期
这太好了。但我必须使用2005年。 – Jared
如果只是日期传递到SQL Server,它会使时间凌晨12:00。所以,between子句的结束日期是9/9/2009 12:00 AM。只需添加一天或修改传入查询的日期以包含正确的时间。
如果您在使用SQL Server 2008,那么这样做:
TheDate BETWEEN cast(@EnteredBeginDate as date) AND cast(@EnteredEndDate as date)
什么** **版本的SQL Server? –