处理日期和时间数据--过滤日期范围
如果要过滤日期范围(比如,整年或整月),比较自然的方法就是使用YEAR和MONTH之类的函数。例如,以下查询返回2007年中生成的所有订单:
1 SELECT orderid,custid,empid,orderdate
2 FROM Sales.Orders
3 WHERE YEAR(orderdate) = 2007;
不过,应该小心的一点是:在大多数情况下,当对过滤条件中的列应用了一定的处理后,就不能以有效的方式来使用索引了。为了潜在地有效利用索引,就需要对谓词进行调整,以便对过滤条件中的列不进行处理,如下所示:
1 SELECT orderid,custid,empid,orderdate
2 FROM Sales.Orders
3 WHERE orderdate >= '20070101' AND orderdate < '20080101';
类似地,不应该使用函数来过滤某个月生成的订单,如下所示:
1 SELECT orderid,custid,empid,orderdate
2 FROM Sales.Orders
3 WHERE YEAR(orderdate) = 2007 AND MONTH(orderdate) = 2;
而应该使用一个范围过滤条件,如下所示:
1 SELECT orderid,custid,empid,orderdate
2 FROM Sales.Orders
3 WHERE orderdate >= '20070201' AND orderdate < '20070301';