2011-01-03 8 views
5

Guys, czy jest jakiś lepszy sposób wymienić wszystkie miesiące inne niż to:Lista wszystkich miesiące wykorzystaniem 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; 

ODPOWIEDŹ:

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

jedno pytanie patrz poniżej

Chcę również wymienić poprzednie dwa lata, w tym rok bieżący. Napisałem to zapytanie sql. Daj mi znać, jeśli jest coś lepszego.

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

@ksogor i @Rob łaskawie spojrzeć na inne pytanie dodanej powyżej. –

+1

To drugie zapytanie jest wystarczająco dobre. –

+0

@Rob ok dzięki. –

Odpowiedz

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 mówi, że tabela lub widok nie istnieje. –

+0

Nie napisałeś nic o swojej wersji db. Mi to pasuje. – ksogor

+0

@ksogor, pracuję nad sql Oracle. –

11

Nie lepiej, ale tylko nieco czystsze:

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. 

Pozdrowienia, Rob.

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

Powroty:

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; 

Pozdrawiam, Prasant Sutaria