출처 : http://bliseer.blogspot.com/2009_04_01_archive.html
특정 기간의 평일/주말을 구분하는 통계 산출 때문에 연단위의 달력이 필요했는데,,
어느 분이 이미 정리한게 있어.. 쿼리를 약간 수정해서 응용했습니다.
아래 붉은색으로 표시한 년월만 수정하면 원하는 기간으로 달력을 조회할 수 있습니다.
--2011년 01월부터 12월 기간의 달력 생성 쿼리
select dates,
weekday,
decode(weekday,'1','일','2','월','3','화','4','수','5','목','6','금','7','토') "weekday(요일)",
week_cnt "week_cnt(주차)"
from (
select to_date(days,'yyyymmdd') as dates,
to_char(to_date(days,'yyyymmdd'), 'd') as weekday,
week_cnt
from (select to_char(months,'yyyymm') as months,
to_char(months,'yyyymm') || lpad(lv, 2, '0') as days,
day_cnt,
(lv + (7-to_char(months+(lv-1), 'd')) + (to_char(to_date(to_char(months, 'yyyymm')||'01', 'yyyymmdd'), 'd')-1)) / 7 as week_cnt
from (select add_months(to_date(201101,'yyyymm'), lv - 1) as months,
to_char(last_day(add_months(to_date(201101,'yyyymm'), lv-1)), 'dd') as day_cnt
from dual sa,
(select level lv
from dual
connect by level <= months_between(to_date(201112,'yyyymm'), to_date(201101,'yyyymm'))+1)
) a,
(select level lv
from dual
connect by level <= 31
) b
) m
where months||day_cnt >= days
order by months, days
)
Row# Dates Weekday Weekday(요일) Week_cnt(주차)
1 01/01/2011 7 토 1
2 01/02/2011 1 일 2
3 01/03/2011 2 월 2
4 01/04/2011 3 화 2
5 01/05/2011 4 수 2
~ 생 략 ~
359 12/25/2011 1 일 5
360 12/26/2011 2 월 5
361 12/27/2011 3 화 5
362 12/28/2011 4 수 5
363 12/29/2011 5 목 5
364 12/30/2011 6 금 5
365 12/31/2011 7 토 5
Oracle 사고친 유저 찾아보자 (0) | 2012.08.23 |
---|---|
오라클 달력과 관련해서... (0) | 2012.08.23 |
Oracle 랜덤 문자열 생성 (0) | 2012.08.23 |
ORA-02020: too many database links in use 에러 조치 방법 (0) | 2012.08.23 |
Oracle Lock 확인 (0) | 2012.08.11 |