0

如何选择最近 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
4

3 回答 3

2

我认为最清楚的方法是使用该year()功能:

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

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

select *
from t
where "date" >= trunc(add_months(sysdate, -3*12), 'yyyy')
于 2013-07-21T13:49:29.673 回答
1
SELECT ID, DATE FROM FOO 
    WHERE DATE >= TRUNC(ADD_MONTHS(SYSDATE, -3*12), 'YYYY');

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

于 2013-07-21T13:50:27.170 回答
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'
于 2013-07-21T13:42:52.487 回答