SQL 2005获取当前年份的数据

时间:2013-01-21 05:15:27

标签: sql-server-2005

我有一个视图,其中包含2012年至今的销售数据,我需要编写仅显示当前年度销售额的查询(2013)。

这是我在第一阶段尝试的内容

SELECT * 
FROM [Sales_Data] 
WHERE invoiceDate  between '2013-01-01' and '2013-12-31' 

此查询需要2秒才能加载数据,我虽然要更改查询以获取不需要我手动更新的数据,这就是我在网上找到的内容:

select * from [Sales_Data]  
where datepart(yyyy,invoiceDate) =datepart(yyyy,getdate()) 
and datepart(yyyy,invoiceDate) =datepart(yyyy,getdate())

因此,此查询需要更长时间才能显示数据(9秒)。 如果有更好的查询可以在更短的时间内定义和获取数据,请告诉我?

1 个答案:

答案 0 :(得分:2)

您的第二个查询需要sql server对您要查询的每一行执行计算。

以下查询更接近您原始的select语句。

select * from [Sales_data]
where invoiceDate between DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()), 0) --- First Day of current year
and DATEADD(MILLISECOND, -3,DATEADD(YEAR, DATEDIFF(YEAR, 0, GETDATE()) + 1, 0)) --- Last Day of current year

根据您查询的视图的进展情况,您可能还会受益于包含invoiceDate字段的索引。

您可能需要检查运行查询时生成的执行计划,以查看查询运行时幕后发生的情况。