Select * from [User] U
where U.DateCreated = '2014-02-07'
但在数据库中创建了用户2014-02-07 12:30:47.220
当我只放'2014-02-07'
它不显示任何数据
不要试图做这样的事情:
Select * from [User] U where convert(varchar(10),U.DateCreated, 120) = '2014-02-07'
这是一个更好的方法:
Select * from [User] U
where U.DateCreated >= '2014-02-07' and U.DateCreated < dateadd(day,1,'2014-02-07')
see: “SARGable”这个词的真正含义是什么?
编辑+
避免在 where 子句(或连接条件)中对数据使用函数有两个根本原因。
- 在大多数情况下,对数据使用函数进行过滤或连接会消除优化器访问该字段上索引的能力,从而使查询变慢(或更“昂贵”)
- 另一个是,对于所涉及的每一行数据,至少执行一次计算。这可能会向查询添加数百、数千或数百万次计算,以便我们可以与单个条件进行比较,例如
2014-02-07
。相反,改变标准以适应数据要有效得多。
“修改标准以适应数据”是我描述“使用SARGABLE
谓词”
并且不要在两者之间使用。
日期和时间范围的最佳实践是避免 BETWEEN 和
始终使用以下形式:
WHERE col >= '20120101' AND col
http://sqlmag.com/t-sql/t-sql-best-practices-part-2(伊齐克·本·甘)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)