如何在 DateTime 类型列上使用 WHERE 子句选择年份

Zuu*_*uuu 2 sql database sql-server

有一个表Sales包含从 2005 年到 2015 年的数据我想查询数据并过滤数据类型为 2013 年的列,Sales_Date包括datetime所有其他列

     SELECT *
     FROM Sales
     WHERE Sales_Date BETWEEN '2013-01-01' AND '2014-01-01';
Run Code Online (Sandbox Code Playgroud)

这是正确的还是有一个函数专门用于按datetime数据类型年份过滤查询

sti*_*bit 8

它不正确,因为它包含 2014 年 1 月 1 日的数据,而不是 2013 年的某一天。

>=使用and<来搜索末尾开放的区间,而不是检查闭区间的 Between 。

SELECT *
       FROM sales
       WHERE sales_date >= '2013-01-01'
             AND sales_date < '2014-01-01';
Run Code Online (Sandbox Code Playgroud)

您还可以使用year()ordatepart()来提取年份,例如

...
WHERE year(sales_date) = 2013;
Run Code Online (Sandbox Code Playgroud)

或者

...
WHERE datepart(year, sales_date) = 2013;
Run Code Online (Sandbox Code Playgroud)

但这会阻止sales_date使用任何索引,这在性能方面并不好。因此,这不是查询该数据的最佳方法,第一种使用>=和 的方法<是首选。