상세 컨텐츠

본문 제목

오라클 날짜 비교 연산

DataBase/Oracle

by xarfox 2011. 8. 2. 15:18

본문

오라클에서 날짜 연산의 결과는 NUMBER형태의 일(DAY) 단위로 나옵니다.

단순히 날짜끼리만 빼면 두 날짜 사이의 일수가 나오는거죠

그걸 다시 년으로, 월로, 일로, 시간으로, 분으로, 초로.. 변형을 해야합니다.

 

TO_CHAR(날짜-날짜, 'YYYYMMDD HH24MISS')를 하게되면 중간의 날짜-날짜의 결과가 NUMBER로 나타나기때문에 에러가 발생합니다..

 

그래서 여러 함수를 이용해서 변형을 해줘야 합니다.

사용한 함수는 아래와 같습니다.

MONTHS_BETWEEN이라는 함수는 두 날짜 사이의 개월수를 리턴해줍니다.

MOD는 나머지를 리턴해줍니다

TRUNC는 지정한 자리수이하는 잘라내기

ROUND는 지정한 자리수만이하 반올림하기

FLOOR는 지정한 자리수 이하 올림하기

TO_DATE는 지정된 형식으로 DATE형으로 변환하기

 

SELECT
  TRUNC(MONTHS_BETWEEN(종료날짜, 시작날짜)/12) "년",
  TRUNC(MOD(MONTHS_BETWEEN(종료날짜, 시작날짜),12)) "개월",
  FLOOR(MOD(MONTHS_BETWEEN(종료날짜, 시작날짜),1)*30.5) "일",
  TRUNC(MOD(종료날짜-시작날짜,1)*24) "시간",
  TRUNC(MOD((종료날짜-시작날짜)*24,1)*60) "분",
  TRUNC(ROUND(MOD((종료날짜-시작날짜)*24*60,1)*60)) "초"
FROM DUAL;

 

조금 복잡해 보일 수 있지만 천천히 보시면 이해하실 수 있을것입니다.

"년"은 두 날짜사이의 개월 차이를 구해 12로 나눕니다

"월"은 12로 나눈 나머지의 숫자를 구합니다

"일"은 월을 뺀 나머지의 소숫점이하 값에 날짜에 평균월수를 30.5라고 가정하고 곱해준 후 올림합니다

"시간"은 두 날짜사이의 값을 뺀 결과인 일(DAY)의 소수점 자리를 24로 곱해줍니다

"분"은 두 날짜사의의 값을 뺀 결과에 24를 곱한 후 나머지 소수점 자리를 60으로 곱해줍니다

"초"는 두 날짜사의의 값을 뺀 결과에 24*60를 곱한 후 나머지 소수점 자리를 60으로 곱해준 후 반올림 합니다


출처 : http://rahxephon.tistory.com/1408

관련글 더보기