2010-03-17 1 views

답변

6

두 부분이 있습니다 만 년 이 질문에. 일정 범위의 생성은 매우 간단합니다. CONNECT BY와 함께 트릭을 사용하여 here을 시연했습니다. 새해의 일의 최초의 목록을 생성

편집

매우 간단합니다 :

SQL> select add_months(to_date('01-jan-1900'), (level-1)*12) as year 
    2 from dual 
    3 connect by level <= 101 
    4/

YEAR 
--------- 
01-JAN-00 
01-JAN-01 
01-JAN-02 
... 
01-JAN-98 
01-JAN-99 
01-JAN-00 

101 rows selected. 

SQL> 

당신은 단지 년이 원하는? 그 중 하나에 to_char(... , 'YYYY')을 사용하십시오. 아니면 체이스로 잘라내서 1900-2000 년의 숫자 목록을 생성하십시오.

요청의 가장 까다로운 부분은 몇 년이 걸리는지입니다. 끝 날짜가 아닌 시작 날짜와 오프셋을 지정하는 것이 더 쉬울 것입니다. 어쨌든 ...

SQL> select to_char(add_months(to_date('&&start_date'), (level-1)*12), 'YYYY') as year 
    2 from dual 
    3 connect by level <= (to_number(to_char(to_date('&&end_date'), 'yyyy')) 
    4      -to_number(to_char(to_date('&&start_date'), 'yyyy'))) + 1 
    5/
Enter value for start_date: 01-jan-1900 
old 1: select add_months(to_date('&&start_date'), (level-1)*12) as year 
new 1: select add_months(to_date('01-jan-1900'), (level-1)*12) as year 
Enter value for end_date: 01-jan-2000 
old 3: connect by level <= (to_number(to_char(to_date('&&end_date'), 'yyyy')) 
new 3: connect by level <= (to_number(to_char(to_date('01-jan-2000'), 'yyyy')) 
old 4:      -to_number(to_char(to_date('&&start_date'), 'yyyy'))) - 1 
new 4:      -to_number(to_char(to_date('01-jan-1900'), 'yyyy'))) - 1 


YEAR 
---- 
1900 
1901 
1902 
... 
1998 
1999 
2000 

101 rows selected. 

SQL> 
+0

질문이 업데이트되었습니다. – Vicky

관련 문제