使用oracle sql列出所有月份

Dea*_*mer 6 sql oracle

伙计们,有没有更好的方法来列出除此之外的所有月份:

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;
Run Code Online (Sandbox Code Playgroud)

回答:

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

更多问题见下文

另外,我想列出前两年,包括当年.我写了这个SQL查询.如果有更好的事情,请告诉我.

select extract(year from sysdate) - (level-1) as years 
  from dual 
connect by level <=3 
order by years
Run Code Online (Sandbox Code Playgroud)

Rob*_*ijk 11

不是更好,但只是更清洁:

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.
Run Code Online (Sandbox Code Playgroud)

问候,Rob.


kso*_*gor 7

对.

1:

SELECT * FROM WWV_FLOW_MONTHS_MONTH;
Run Code Online (Sandbox Code Playgroud)

2 :( UPD :)

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;
Run Code Online (Sandbox Code Playgroud)

  • wwv_flow_months_month要求安装APEX:http://download.oracle.com/docs/cd/E11882_01/appdev.112/e11947/priv_public.htm#HTMDB25949 (5认同)

Dou*_*ter 6

select to_char(add_months(trunc(sysdate, 'yyyy'), level - 1), 'MONTH') months
  from dual
connect by level <= 12;
Run Code Online (Sandbox Code Playgroud)

返回:

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

12 rows selected.
Run Code Online (Sandbox Code Playgroud)