SQL Server:如何获取日期早于X年的行?

时间:2014-11-18 08:48:57

标签: sql sql-server

问题

我想从一个已经存在一定年限的数据库中提取所有资产,在这种情况下是几年。这个陈述是否正确?

背景

数据库名为AssetRegister

该表名为dbo.Assets

该列名为AcquiredDate

到目前为止的声明

SELECT * FROM dbo.Assets WHERE AcquiredDate < '2008-01-01'

4 个答案:

答案 0 :(得分:10)

SELECT * FROM dbo.Assets                  
WHERE DATEDIFF(YEAR, AcquiredDate, GetDate()) >= 8

答案 1 :(得分:1)

@Juergen的回答带来了正确的结果:

SELECT * FROM dbo.Assets                  
WHERE DATEDIFF(YEAR, AcquiredDate, GetDate()) >= 8

但是,SQL优化器不能在AcquiredDate上使用索引,即使存在索引也是如此。它实际上必须为表的每一行评估此函数。

建议使用大表:

DECLARE @limitDate Date
SELECT @limitDate=DATEADD(year,-8,GETDATE()) --Calculate limit date 8 year before now.

SELECT * FROM dbo.Assets                  
WHERE AcquiredDate <= @limitDate

或者简单地说:

SELECT * FROM dbo.Assets                  
    WHERE AcquiredDate <= DATEADD(year,-8,GETDATE())

答案 2 :(得分:0)

SELECT * FROM dbo.Assets WHERE AcquiredDate >= '2006-01-01'

SELECT * FROM dbo.Assets WHERE AcquiredDate >= (year(getdate()) - 8) 

答案 3 :(得分:-2)

SELECT * FROM dbo.Assets 
 WHERE YEAR(AcquiredDate) < 2008

juergen d和Ankit发布的解决方案更好,但是如果你想比较Year,你可以使用YEAR函数。