我有表格(我们称之为AAA),其中包含3个列 ID,DateFrom,DateTo
我想编写一个查询,以便在特定年份(例如2016年)的DateFrom-DateTo期间内返回包含(甚至1天)的所有记录。
我正在使用SQL Server 2005
谢谢
答案 0 :(得分:3)
另一种方式是:
SELECT <columns list>
FROM AAA
WHERE DateFrom <= '2016-12-31' AND DateTo >= '2016-01-01'
如果您在DateFrom
和DateTo
上有索引,则此查询允许Sql-Server使用该索引,这与Max xaM的答案中的查询不同。
在一个小表上你可能看不出有什么区别,但是在一个大表上,使用该查询会有很大的性能损失,因为如果where子句中的列在函数内部,则Sql-Server不能使用索引
答案 1 :(得分:1)
试试这个:
SELECT * FROM AAA
WHERE DATEPART(YEAR,DateFrom)=2016 OR DATEPART(YEAR,DateTo)=2016
答案 2 :(得分:1)