본문 바로가기

오라클(Oracle)

오라클 - 해당일자 기준 요일구하기

반응형

오라클 요일함수-주간 요일 찾기

 

TRUNC 주(Week)에 대한 Format 

'w' : 매월1일 요일을 기준한 주초일자.

'ww' : 매년 1월1일 요일을 기준한 주초일자.

'iw' : 주초 월요일일자.

'd' / 'dy' / 'day' : 주초 일요일 일자. 

 

 

TRUNC week 예제

-- 해당 주의 첫번째 일자 [주초 일자]
SELECT
      SYSDATE - 7 AS "7일전"
    , TRUNC(SYSDATE, 'w') AS 매월1일_요일_기준 --매월1일 요일을 기준한 주초일자
    , TRUNC(SYSDATE, 'ww') AS 매년1월1일_요일_기준 --매년 1월1일 요일을 기준한 주초일자.
    , TRUNC(SYSDATE, 'iw') AS 월요일_기준 
    , TRUNC(SYSDATE, 'dy') AS 일요일_기준 
    , TRUNC(SYSDATE, 'iw') - 2 AS 항상_전주토요일1 
    , TRUNC(SYSDATE, 'dy') - 1 AS 항상_전주토요일2
FROM dual
;

 

 

day  : Day of week (월-일 or Mon-Sun).

select sysdate from dual
;

select to_char(sysdate,'D') from dual   
;

select to_char(sysdate,'DAY') from dual   
;

select to_char(sysdate,'yyyymmdd day') from dual   
;

 

 

d  : Day of week (1-7).
iw : Week of year (1-52 or 1-53) based on the ISO standard.

 

-- 월요일 기준 : 오늘 날짜를 기준으로 월요일 일자 찾기

[올바른 예]

select  TO_CHAR(TRUNC(sysdate,'iw')  ,'yyyymmdd') mon from dual; 주 처음일자

select  TO_CHAR(TRUNC(sysdate,'iw') +6  ,'yyyymmdd') mon from dual; -- 주 마지막일자

 

[잘못된 예]  일자 연산하기 위해 넣은 숫자 위치가 TRUNC 함수 바로 뒤에서 연산되어야 한다.

 

샘플 ) select  TO_CHAR(TRUNC(sysdate,'iw')  ,'yyyymmdd') +6 mon from dual; -- 주 마지막일자

 

위와 같이 시스템에서 날짜계산이 모두 끝난 시점인 TO_CHAR(블라~~블라~~) 뒤에서 연산 하면

문자열에 날자를 더하는 형식이 되므로 주의 해야 함

 

예를 들어 TO_CHAR(TRUNC(sysdate,'iw')  ,'yyyymmdd')  의

결과 값이 '20101128' 이었다고 한다면

시스템에서는 to_number('20101128') +6 = 20101134 의 결과 값을 토해 낸다.

 -- 월요일기준
SELECT sysdate
     , TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')  ,'yyyymmdd') mon
     , TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')+1,'yyyymmdd') tue
     , TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')+2,'yyyymmdd') wed
     , TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')+3,'yyyymmdd') thu
     , TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')+4,'yyyymmdd') fri
     , TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')+5,'yyyymmdd') sat
     , TO_CHAR(TRUNC(TO_DATE(20100101,'yyyymmdd'),'iw')+6,'yyyymmdd') sun
FROM dual
;
 
 -- 월요일기준
SELECT to_char(sysdate, 'yyyymmdd day') 금일
     , TO_CHAR(TRUNC(sysdate,'iw')  ,'yyyymmdd day') 월
     , TO_CHAR(TRUNC(sysdate,'iw')+1,'yyyymmdd day') 화
     , TO_CHAR(TRUNC(sysdate,'iw')+2,'yyyymmdd day') 수
     , TO_CHAR(TRUNC(sysdate,'iw')+3,'yyyymmdd day') 목
     , TO_CHAR(TRUNC(sysdate,'iw')+4,'yyyymmdd day') 금
     , TO_CHAR(TRUNC(sysdate,'iw')+5,'yyyymmdd day') 토
     , TO_CHAR(TRUNC(sysdate,'iw')+6,'yyyymmdd day') 일
  FROM dual
 ; 
 

 

 -- 일요일기준
SELECT to_char(sysdate, 'yyyymmdd day') 금일
     , TO_CHAR(TRUNC(sysdate,'d')  ,'yyyymmdd day') 일
     , TO_CHAR(TRUNC(sysdate,'d')+1,'yyyymmdd day') 월
     , TO_CHAR(TRUNC(sysdate,'d')+2,'yyyymmdd day') 화
     , TO_CHAR(TRUNC(sysdate,'d')+3,'yyyymmdd day') 수
     , TO_CHAR(TRUNC(sysdate,'d')+4,'yyyymmdd day') 목
     , TO_CHAR(TRUNC(sysdate,'d')+5,'yyyymmdd day') 금
     , TO_CHAR(TRUNC(sysdate,'d')+6,'yyyymmdd day') 토
  FROM dual
 ;


반응형