选择最近n年的记录

时间:2013-07-21 13:39:30

标签: sql oracle date select

如何选择最近3年的记录,只考虑年份而不是整个日期dd-mm-yy
假设今年是2013年,查询应显示2013,2012和2011年的所有记录 如果明年是2014年,则记录应在2014年,2013年,2012年 等等....

table foo  

ID    DATE
----- ---------
a0001 20-MAY-10
a0002 20-MAY-10
a0003 11-MAY-11
a0004 11-MAY-11
a0005 12-MAY-11
a0006 12-JUN-12
a0007 12-JUN-12
a0008 12-JUN-12
a0009 12-JUN-13
a0010 12-JUN-13

3 个答案:

答案 0 :(得分:2)

我认为最明智的方法是使用year()函数:

select *
from t
where year("date") >= 2011;

但是,在where子句中使用函数通常会阻止使用索引。因此,如果您在日期列上有大量数据和索引,那么使用当前日期的内容会更好。以下采用这种方法:

select *
from t
where "date" >= trunc(add_months(sysdate, -3*12), 'yyyy')

答案 1 :(得分:1)

SELECT ID, DATE FROM FOO 
    WHERE DATE >= TRUNC(ADD_MONTHS(SYSDATE, -3*12), 'YYYY');

这里我们使用 ADD_MONTHS 获取最近36个月的数据。我们添加12 * 3 ,即过去3年的数据 SYSDATE

答案 2 :(得分:0)

这很容易,所以我怀疑你的问题不明确。

SELECT *
FROM foo
WHERE [date] >= '2011-01-01 00:00:00'

这对你有用吗?

<强>更新

如果您希望动态执行此操作,可以使用变量。

下面是如何在SQL Server中执行此操作(我不知道Oracle的语法)

DECLARE @startYear int
SET @startYear = YEAR(GETDATE()) - 2

SELECT *
FROM foo
WHERE [date] >= @startYear + '-01-01 00:00:00'
相关问题