如何选择最近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
答案 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'