2011-01-03 8 views
5

ガイズを使用してすべての月、これ以外のすべての月をリストする任意のより良い方法があります:リストの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; 

ANSWER:

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

はONE MORE問題の下

を参照してください

また、今年を含む過去2年間のリストを作成したいと思います。私はこのSQLクエリを書いた。もっと良いことがあれば教えてください。

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

@ksogorと@Robが親切に上記の追加別の質問を見てください。 –

+1

2番目のクエリで十分です。 –

+0

@Robありがとう。 –

答えて

4

です。

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それはテーブルまたはビューが存在しないと言います。 –

+0

あなたのdbバージョンについては何も書いていません。わたしにはできる。 – ksogor

+0

@ksogor、私はoracle sqlで作業しています。 –

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. 

よろしく、 ロブ。

4
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. 
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; 

よろしく、 Prasant Sutaria