3

我有一个有列的表

 TypeExame, DateExame

如何选择 (Now-DateExame) > = 365 天的所有记录?

4

3 回答 3

4
select *
from MyTable
where datediff (day, DateExame, getdate()) >= 365

有关详细信息,请参阅DATEDIFFGETDATE

于 2013-07-06T10:01:10.397 回答
3

如果您有一个索引 on DateExame,则设置这样的条件将启用它的使用:

SELECT *
FROM atable
WHERE DateExame <= DATEADD(DAY, -365, CAST(GETDATE() AS date))
;

以上引用了date数据类型,这意味着您至少需要 SQL Server 2008 才能运行它。要使其在早期版本中工作,您可以像这样重写条件:

WHERE DateExame <= DATEADD(DAY, DATEDIFF(DAY, 0, GETDATE()) - 365, 0)

基本上,修改后的版本使用DATEADD/DATEDIFF 方法来截断一个datetime值,并稍作调整以同时减去 365 天。

但是,如果您的所有DateExame值都是没有时间部分的日期,那么这个更简单的版本应该也可以工作:

WHERE DateExame <= DATEADD(DAY, -365, GETDATE())

也就是说,GETDATE()完全没有必要删除 ' 结果的时间部分。

于 2013-07-07T22:21:42.900 回答
1

试试这个:

select *
from MyTable
where datediff (day, DateExame, getdate()) >= 365

通过使用 Datediff 函数,您可以减去两个日期。您可以将第一个参数传递为分钟、日、月、年等。

于 2013-07-06T10:02:06.797 回答