2011-01-03 11 views
5

Ragazzi, c'è un modo migliore per elencare tutti i mesi diversi dal presente:Lista tutti i mesi che utilizzano 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; 

RISPOSTA:

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

un'altra domanda vedi sotto

Inoltre desidero elencare i due anni precedenti incluso l'anno in corso. Ho scritto questa query sql. Fammi sapere se c'è qualcosa di meglio.

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

@ksogor e @ Rob gentilmente guardare il un'altra questione aggiunto sopra. –

+1

Questa seconda query è abbastanza buona. –

+0

@Rob ok, grazie. –

risposta

4

Sì.

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 che la tabella o la vista non esiste. –

+0

Non hai scritto nulla sulla tua versione di db. Per me funziona. – ksogor

+0

@ksogor, sto lavorando su Oracle sql. –

11

Non migliore, ma solo un po 'più pulito:

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. 

saluti, Rob.

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

Returns:

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; 

saluti, Prasant Sutaria

Problemi correlati