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

时间:2019-05-12 18:04:26

标签: sql sql-server database

有一个Sales表,其中包含2005年至2015年的数据 我想查询数据并使用Sales_Date数据类型过滤列datetime,其中年份是2013,包括所有其他列

     SELECT *
     FROM Sales
     WHERE Sales_Date BETWEEN '2013-01-01' AND '2014-01-01';

是正确的还是有一个专门用于按年份datetime过滤查询的功能

2 个答案:

答案 0 :(得分:2)

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

使用>=<来搜索最后一个打开的间隔,而不是使用它们来检查封闭的间隔。

SELECT *
       FROM sales
       WHERE sales_date >= '2013-01-01'
             AND sales_date < '2014-01-01';

您还可以使用year()datepart()提取年份,如

...
WHERE year(sales_date) = 2013;

...
WHERE datepart(year, sales_date) = 2013;

但是,这将阻止使用sales_date上的任何索引,这对性能而言是不好的。因此,这并不是查询数据的最佳方法,首选使用>=<的第一种方法。

答案 1 :(得分:0)

您可以使用year函数:

SELECT *
FROM   Sales
WHERE  YEAR(Sales_Date) = 2013;