使用Oracle SQL列出所有月份

6

大家好,除了下面这种方法,还有更好的列出所有月份的方式吗:

select to_char(add_months(to_date('01/01/1000', 'DD/MM/RRRR'), ind.l-1), 'MONTH') as month_descr,
       ind.l as month_ind
  from dual descr,
       (select l
          from (select level l 
                  from dual 
                connect by level <= 12
               )
       ) ind
order by 2;

ANSWER:

SELECT to_char(add_months(SYSDATE, (LEVEL-1 )),'MONTH') as months 
  FROM dual 
CONNECT BY LEVEL <= 1

还有一个问题请看下面

另外,我想列出包括当前年份在内的前两年。我编写了以下SQL查询语句,请告诉我是否有更好的方法。

select extract(year from sysdate) - (level-1) as years 
  from dual 
connect by level <=3 
order by years

@ksogor和@Rob,请看一下上面新增的另一个问题。 - Dead Programmer
1
那个第二个查询已经足够好了。 - Rob van Wijk
2
顺便提一下,RRRR 没有意义。虽然 Oracle 不会报错,但这很令人困惑。 - Stephanie Page
@Stephanie RRRR - 其他人? - Dead Programmer
不确定“其他人”是什么意思。但是...您将图片格式显示为'DD/MM/RRRR'。Oracle使用两个R来执行一些巧妙的技巧以避免Y2K问题。但是,如果您没有两位数的日期,则不需要那种聪明的数学YYYY就是YYYY,您不需要猜测正确的世纪。“DD/MM/RR”是有道理的。您正在要求Oracle以智能方式猜测世纪。“DD/MM/YYYY”是有道理的,因为您知道确切的世纪。“DD/MM/RRRR”没有意义。 - Stephanie Page
5个回答

14

不是更好,只是更清晰一点:

SQL>  select to_char(date '2000-12-01' + numtoyminterval(level,'month'),'MONTH') as month
  2     from dual
  3  connect by level <= 12
  4  /

MONTH
---------
JANUARY
FEBRUARY
MARCH
APRIL
MAY
JUNE
JULY
AUGUST
SEPTEMBER
OCTOBER
NOVEMBER
DECEMBER

12 rows selected.

敬礼,
罗伯


7

Yup.

1:

SELECT * FROM WWV_FLOW_MONTHS_MONTH;

2: (更新:)

WITH MONTH_COUNTER AS (
  SELECT LEVEL-1 AS ID 
  FROM DUAL 
  CONNECT BY LEVEL <= 12
) 
SELECT TO_CHAR(ADD_MONTHS(TO_DATE('01/01/1000', 'DD/MM/RRRR'), ID),'MONTH') FROM MONTH_COUNTER;

@ksogor,它说表格或视图不存在。 - Dead Programmer
你没有写关于你的数据库版本的任何信息。它在我这里可以正常工作。 - ksogor
你的“Oracle SQL”版本是什么? - ksogor
只需显示此SQL查询的答案:select * from v$version; - ksogor
5
wwv_flow_months_month需要安装APEX:http://download.oracle.com/docs/cd/E11882_01/appdev.112/e11947/priv_public.htm#HTMDB25949。 - Rob van Wijk

6
select to_char(add_months(trunc(sysdate, 'yyyy'), level - 1), 'MONTH') months
  from dual
connect by level <= 12;

返回:

MONTHS
--------------------
JANUARY
FEBRUARY
MARCH
APRIL
MAY
JUNE
JULY
AUGUST
SEPTEMBER
OCTOBER
NOVEMBER
DECEMBER

12 rows selected.

3
SELECT to_char(to_date( level,'mm'), 'MONTH') Months FROM DUAL CONNECT BY LEVEL <=12;

问候, Prasant Sutaria


0
 SELECT TO_CHAR(TO_DATE(rownum||'-'||rownum||'-'||'2013', 'DD-MM-YYYY'), 'Month') 
 FROM    all_objects 
 WHERE rownum < 13

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接