본문 바로가기
Programming/SQL

[Oracle] 10. 다양한 날짜함수(ROUND, TRUNC, MONTH_BETWEEN, ADD_MONTHS, NEXT_DAY)

by 고막고막 2019. 4. 23.
ROUND 형식에 맞추어 반올림한 날짜를 반환한다
 ROUND(날짜, 형식)
 ROUND(sysdate, 'DD') → 2019/04/23
TRUNC 형식에 맞추어 절삭한 날짜를 반환한다
 TRUNC(날짜 형식)
 TRUNC(sysdate, 'YYYY')  2019/01/01
MONTH_BETWEEN 두 날짜간의 기간을 월 수로 계산한다
 MONTH_BETWEEN(날짜1, 날짜2)
 MONTH_BETWEEN('2011/07/01', '2011/08/01')  -1
 MONTH_BETWEEN('2011/08/01', '2011/07/01')  1
ADD_MONTHS 날짜에 n달을 더한 날짜를 계산하다
 ADD_MONTH(날짜, n)
 ADD_MONTH('2011/07/01', 23)  2013/06/01
NEXT_DAY 날짜 이후 지정된 요일에 해당하는 날짜 계산
 NEXT_DAY(날짜, 요일)
 NEXT_DAY('2011/07/14', '일요일')  2011/07/17

 

예제1) 김연아가 오늘까지 일한 일수를 검색

SELECT TRUNC(sysdate, 'DD') - TRUNC(sysdate, 'DD')+1 DAY
// 마이너스 연산을 하면 입사일은 근무일수에서 빠져버림으로 1을 더함
FROM emp WHERE ename='김연아';

예제2) 20번 부서 직원들이 현재까지 근무한 개월 수를 검색한다

SELECT dno 부서번호, eno 사번, ename 사원명, hdate 입사일,
	   TRUNC(MONTHS_BETWEEN(sysdate, hdate)) 근무개월
FROM emp WHERE dno=20;

예제3) 20번 부서원들이 입사 100일째 되는 날과 10년째 되는 날을 검색

SELECT dno 부서번호, eno 사번, ename 사원명, hdate 입사일,
	   hdate+100 "입사 후 100일", ADD_MONTHS(hdate, 120) "입사 후 10년"
FROM emp WHERE dno=20;