SELECT WHERE Date = Day

Ste*_*ans 2 sql sql-server sql-server-2008

我有一个表格,其中包含dateTime类型的列.我想做一个查询,选择在该日期发生的所有行.基本上,

SELECT * FROM Table
WHERE [timeStamp] = '02-15-2003'
Run Code Online (Sandbox Code Playgroud)

但是那只返回[timeStamp]为'02 -15-2003 00:00:00.000'的行,但实际上我想要那天任何时候的行.

Cad*_*oux 17

如果您有索引,那么您将需要一些不会阻止索引使用的东西:

SELECT *
FROM Table 
WHERE [timeStamp] >= '20030215'
      AND [timeStamp] < '20030216'
Run Code Online (Sandbox Code Playgroud)

您可以对[timeStamp]列执行截断操作以消除任何时间部分(依赖于实现),但这可能会损害执行计划.不幸的是,你真的必须看看执行计划才能看到这一点,因为有时优化器对某些功能很聪明,有时则不然.

  • Huraah!最后一个正确的答案.你想过在dba.se上加入我们吗?http://chat.stackexchange.com/rooms/179/the-heap (4认同)
  • 我建议的改进只是纠正格式 - "mm-dd-yyyy"不是语言/区域安全.我知道OP正在使用它,但可能只是需要轻推. (4认同)

mat*_*mc3 6

如果您使用的是SQL 2008,则应该过去CAST到DATE.

select * from [Table]
where cast([timeStamp] as date) = '02-15-2003'
Run Code Online (Sandbox Code Playgroud)

删除SQL Server中datetime时间部分的最佳方法

---更新---

评论者应该在2012年使用这个词来描述为什么这不是最佳解决方案的原因是sargability.在最简单的解决方案中,更改WHERE子句中的数据类型会对有界搜索不会对索引使用产生影响.