본문 바로가기

Server Oriented/DB-Oracle

오라클 주차, 오늘이 포함된 주차의 첫 날과 끝 날

http://blog.naver.com/ejjungeo/50185166630

to_char(sysdate,'iw'), 1년에서의 주차(최대 53주차),

to_char(sysdate,'ww'), 1년에서의 주차(최대 53주차)

to_char(sysdate,'w') 이달에서의 주차(최대 5주차)



오늘이 포함된 주차의 첫 날과 끝 날

to_char() 함수에서 옵션이 'd' 가 붙으면, 일요일이 1, 월요일이 2, ...

아래 내용은 주차의 첫 날이 월요일이라고 할 때 그렇구요..

select to_char(sysdate-decode(to_char(sysdate,'d'), 1,6, 2,0, 3,1, 4,2, 5,3, 6,4, 7,5),'yyyymmdd') f,

       to_char(sysdate+decode(to_char(sysdate,'d'), 1,0, 2,6, 3,5, 4,4, 5,3, 6,2, 7,1),'yyyymmdd') t,

       to_char(sysdate -to_char(sysdate,'d') +2 -decode(to_char(sysdate,'d'),1,7,0),'yyyymmdd') f1,

       to_char(sysdate -to_char(sysdate,'d') +8 -decode(to_char(sysdate,'d'),1,7,0),'yyyymmdd') t1,

       to_char(sysdate +decode(to_char(sysdate,'d'),1,-6,2-to_char(sysdate,'d')), 'yyyymmdd') f2,

       to_char(sysdate +decode(to_char(sysdate,'d'),1,0,8-to_char(sysdate,'d')), 'yyyymmdd') t2,

       to_char(sysdate -decode(to_char(sysdate,'d'),1,6,to_char(sysdate,'d')-2), 'yyyymmdd') f3,

       to_char(sysdate -decode(to_char(sysdate,'d'),1,0,to_char(sysdate,'d')-8), 'yyyymmdd') t3 -- 간단한거 없낭..?

  from dual

;


주차의 시작이 일요일이고 마지막이 토요일이면 아래와 같죠.

옵션이 'd' 일 때 1 이 일요일이니까

select to_char(sysdate-decode(to_char(sysdate,'d'), 1,0, 2,1, 3,2, 4,3, 5,4, 6,5, 7,6),'yyyymmdd') f,

       to_char(sysdate+decode(to_char(sysdate,'d'), 1,6, 2,5, 3,4, 4,3, 5,2, 6,1, 7,0),'yyyymmdd') t,

       to_char(sysdate-to_char(sysdate,'d') +1,'yyyymmdd') f2,

       to_char(sysdate-to_char(sysdate,'d') +7,'yyyymmdd') t2

  from dual

;