2015-02-11 100 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