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]列执行截断操作以消除任何时间部分(依赖于实现),但这可能会损害执行计划.不幸的是,你真的必须看看执行计划才能看到这一点,因为有时优化器对某些功能很聪明,有时则不然.
如果您使用的是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子句中的数据类型会对有界搜索不会对索引使用产生影响.
| 归档时间: |
|
| 查看次数: |
25475 次 |
| 最近记录: |