有一个Sales
表,其中包含2005年至2015年的数据
我想查询数据并使用Sales_Date
数据类型过滤列datetime
,其中年份是2013,包括所有其他列
SELECT *
FROM Sales
WHERE Sales_Date BETWEEN '2013-01-01' AND '2014-01-01';
是正确的还是有一个专门用于按年份datetime
过滤查询的功能
答案 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;