2011-01-03 20 views
5

Chicos, ¿hay alguna manera mejor para enumerar todos los meses distintos del presente:Lista de todos los meses utilizando Oracle SQL

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; 

RESPUESTA:

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

una pregunta más ver más abajo

También quiero enumerar los dos años anteriores, incluido el año actual. Escribí esta consulta sql. Avísame si hay algo mejor.

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

@ksogor y @ Rob amablemente vistazo a la otra pregunta agregado anteriormente. –

+1

Esa segunda consulta es suficiente. –

+0

@Rob ok gracias. –

Respuesta

4

Yup.

1:

SELECT * FROM WWV_FLOW_MONTHS_MONTH; 

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; 
+0

@ksogor dice que la tabla o vista no existe. –

+0

No escribió nada sobre su versión db. Esto funciona para mi. – ksogor

+0

@ksogor, estoy trabajando en Oracle sql. –

11

No mejor, pero sólo un poco más limpia:

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. 

Saludos, Rob.

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

Devuelve:

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

12 rows selected. 
0
SELECT TO_CHAR(TO_DATE(rownum||'-'||rownum||'-'||'2013', 'DD-MM-YYYY'), 'Month') 
FROM all_objects 
WHERE rownum < 13 
1
SELECT to_char(to_date(level,'mm'), 'MONTH') Months FROM DUAL CONNECT BY LEVEL <=12; 

Saludos, Prasant Sutaria

Cuestiones relacionadas