관리 메뉴

Data Modeling Evangelist Kaien Kim's Blog

[Oracle]현재월의 첫 특정요일, 마지막 주 특정요일 가져오기 본문

DATA/Oracle

[Oracle]현재월의 첫 특정요일, 마지막 주 특정요일 가져오기

2009. 3. 20. 16:08

우리가 가끔 날짜관련 계산을 하다보면 첫번째 월요일이라든가 마지막 주 월요일이라든가...
뭐 이런 날을 가져와야 할 경우가 있다. 그전에는 날짜 테이블이 있어 쉽게 가져올 수 가있었는데
그렇지 않은 경우는 천상 쿼리로 구현할 수 밖에 없다.
여기에서 핵심 함수는 last_day(date), next_day(date,char) 이다.
그 용법은 간단히 소개하면

last_day()
: 지정한 일자가 포함된 월의 말일
예)
select last_day(sysdate) from dual  -- 지금은 2009년3월20일이다.
09/03/31

next_day(date,char)
: 지정한 일자 다음에 나타나는 지정 요일(두번째 인수)
예)
select next_day((last_day(sysdate)),'금요일') from dual
select next_day((last_day(sysdate)),'금') from dual
select next_day((last_day(sysdate)),6) from dual  -- 일:1 ~ 토:7
09/04/03
뭐 이런식이다

위의 함수를 응용하면 2009년3월의 첫번째 월요일과 마지막주 월요일은 아래와 같이
구할 수 있다.

-- 첫주 월요일
select next_day((trunc(sysdate,'mm')-1),'월') from dual
-- 마지막주 월요일
select next_day((last_day(sysdate)-7),'월') from dual