2015-02-11 101 views
-2

如何獲取oracle中最近10年的列表?如何獲得oracle中最近十年的列表

這是我嘗試

SELECT TO_CHAR(SYSDATE,'yyyy') FROM DUAL 
    UNION ALL 
    SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-12),'yyyy') FROM DUAL 
    UNION ALL 
    SELECT to_char(add_months(sysdate,-24),'yyyy') FROM DUAL 
    UNION ALL 
    SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-36),'yyyy') FROM DUAL 
    UNION ALL 
    SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-48),'yyyy') FROM DUAL 
    UNION ALL 
    SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-60),'yyyy') FROM DUAL 
    UNION ALL 
    SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-72),'yyyy') FROM DUAL 
    UNION ALL 
    SELECT TO_CHAR(ADD_MONTHS(SYSDATE,-84),'yyyy') FROM DUAL 
+1

努力工作。嘗試一下。 – 2015-02-11 16:43:33

+0

列爲所有365 * 10日期? – 2015-02-11 16:43:42

+1

我投票結束這個問題作爲題外話,因爲沒有顯示OP的努力。 – 2015-02-11 16:43:45

回答

1

一個簡單的遞歸查詢和一些基本的數學會做到這一點:

SELECT  CAST (TO_CHAR (SYSDATE, 'yyyy') AS NUMBER) - LEVEL + 1 AS year 
FROM  DUAL 
CONNECT BY LEVEL <= 10 
+0

謝謝艾倫! – JamDakh 2015-02-11 16:56:28

1

您可以通過水平使用connect「絕招」來生成行:

select to_char(add_months(trunc(sysdate, 'yyyy'), -12*(level -1)), 'yyyy') yr 
from dual 
connect by level <= 10; -- possibly 11 if you want this year along with the previous 10 years 

YR 
---- 
2015 
2014 
2013 
2012 
2011 
2010 
2009 
2008 
2007 
2006 
+0

謝謝骨科醫生! – JamDakh 2015-02-11 16:55:30

9

讓我從一個簡單的把戲開始

SELECT LEVEL FROM 
DUAL 
CONNECT BY LEVEL <= 10; 

這將產生1,2 .... 10行。

它的工作原理是,CONNECT BY會嘗試鏈接行。每個人都有一個LEVEL。現在我們提到LEVEL <= 10,因此產生了10行。

你現在的問題是,從SYSDATE 10倍減去12個月..

所以,答案應該是

SELECT TO_CHAR(SYSDATE,'YYYY')-LEVEL+1 FROM 
DUAL 
CONNECT BY LEVEL <= 10; 

現在,你可以開始踢你的創意,你想定製這個SQL 。

祝你好運!

+0

非常感謝你Maheswaran !!!!這對我來說非常有見地,謝謝你,先生! – JamDakh 2015-02-11 17:00:48

+0

相反,感恩節,如果有用,您可以將答案標記爲已接受。 – Aramillo 2015-02-11 18:18:36