我想从一个已经存在一定年限的数据库中提取所有资产,在这种情况下是几年。这个陈述是否正确?
数据库名为AssetRegister
该表名为dbo.Assets
该列名为AcquiredDate
SELECT * FROM dbo.Assets WHERE AcquiredDate < '2008-01-01'
答案 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函数。