2013-07-21 95 views
0

如何選擇最近3年的記錄,只考慮年份而不是整個日期dd-mm-yy
讓我們說,今年是2013年,該查詢應顯示從2013,2012和2011年
所有記錄,如果明年是2014年,記錄應在2014年,2013年,2012
等等....最近n年的選擇記錄

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 

回答

2

我覺得最明顯的辦法是使用year()功能:

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

但是,在where子句中使用函數常常會阻止使用索引。因此,如果日期列中有大量數據和索引,那麼使用當前日期的內容會更好。下面以這種方式:

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

它適用於'(SYSDATE,-2 * 12)', btw謝謝 –

0

這很容易,所以我懷疑你的問題不清楚。

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

這是否適合您?

UPDATE

如果你想這樣做動態,你可以使用變量。

下面是你會怎麼做,在SQL服務器(我不知道這樣做的甲骨文語法)

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

SELECT * 
FROM foo 
WHERE [date] >= @startYear + '-01-01 00:00:00' 
+0

我會想象OP想要的動態,他說: 「近3年」 – jmadsen

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

在這裏,我們通過使用ADD_MONTHS讓過去36個月的數據。我們增加12 * 3即最近3年的數據弗魯姆SYSDATE