[Oracle] 오라클 날짜, 시간 차이 계산 방법 (DATEDIFF)
- 데이터베이스/오라클
- 2021. 5. 8.
오라클에서 날짜 및 시간의 차이를 계산하기 위해서는 수치를 계산하듯 종료일자에서 시작일자를 빼주면 된다. MSSQL에서는 DATEDIFF 함수를 사용하지만 오라클에서는 별도의 함수는 없다.
날짜 차이 : 종료일자(YYYY-MM-DD) - 시작일자(YYYY-MM-DD)
시간 차이 : (종료일시(YYYY-MM-DD HH:MI:SS) - 시작일시(YYYY-MM-DD HH:MI:SS)) * 24
분 차이 : (종료일시(YYYY-MM-DD HH:MI:SS) - 시작일시(YYYY-MM-DD HH:MI:SS)) * 24 * 60
초 차이 : (종료일시(YYYY-MM-DD HH:MI:SS) - 시작일시(YYYY-MM-DD HH:MI:SS)) * 24 * 60 * 60
종료일자에서 시작일자를 빼면 차이 값이 일 기준의 수치 값으로 반환된다.
계산된 값을 시, 분, 초로 변환하기 위해서는 환산값(24*60*60)을 곱해주면 된다.
날짜 차이 계산
SELECT TO_DATE('2021-05-08', 'YYYY-MM-DD') - TO_DATE('2021-05-01', 'YYYY-MM-DD')
FROM dual
2021-05-01과 2021-05-08의 날짜 차이는 7일로 계산 되어서 반환된다.
시간 차이 계산
SELECT ROUND((TO_DATE('15:00', 'HH24:MI') - TO_DATE('13:00', 'HH24:MI')) * 24, 2)
FROM dual
13:00부터 15:00까지 시간 차이는 2시간으로 계산 되어서 반환된다.
시간과 초가 함께 존재하면 소수점이 발생하므로 꼭 ROUND 함수로 소수점을 처리해 줘야 한다.
활용 예제 (일, 시, 분, 초 계산)
SELECT ROUND(TO_DATE('2021-05-08 15:00:00', 'YYYY-MM-DD HH24:MI:SS')
- TO_DATE('2021-05-01 13:00:00', 'YYYY-MM-DD HH24:MI:SS'), 2) AS dd
, ROUND((TO_DATE('2021-05-08 15:00:00', 'YYYY-MM-DD HH24:MI:SS')
- TO_DATE('2021-05-01 13:00:00', 'YYYY-MM-DD HH24:MI:SS')) * 24, 2) AS hh
, ROUND((TO_DATE('2021-05-08 15:00:00', 'YYYY-MM-DD HH24:MI:SS')
- TO_DATE('2021-05-01 13:00:00', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60, 2) AS mm
, ROUND((TO_DATE('2021-05-08 15:00:00', 'YYYY-MM-DD HH24:MI:SS')
- TO_DATE('2021-05-01 13:00:00', 'YYYY-MM-DD HH24:MI:SS')) * 24 * 60 * 60, 2) AS ss
FROM dual
2021-05-01 13:00부터 2021-05-08 15:00까지의 차이 계산 값은 아래와 같다.
날짜 차이 : 7.08일
시간 차이 : 170시간
분 차이 : 10200분
초 차이 : 612000초
소수점 처리
SELECT ROUND(TO_DATE('2021-05-08 20:00:00', 'YYYY-MM-DD HH24:MI:SS')
- TO_DATE('2021-05-01 07:00:00', 'YYYY-MM-DD HH24:MI:SS'), 2) AS dd1
, ROUND(TO_DATE('2021-05-08 20:00:00', 'YYYY-MM-DD HH24:MI:SS')
- TO_DATE('2021-05-01 07:00:00', 'YYYY-MM-DD HH24:MI:SS')) AS dd2
, TRUNC(TO_DATE('2021-05-08 20:00:00', 'YYYY-MM-DD HH24:MI:SS')
- TO_DATE('2021-05-01 07:00:00', 'YYYY-MM-DD HH24:MI:SS')) AS dd2
FROM dual
계산된 값에 소수점 값이 발생항 경우 처리하는 방식에 따라서 최종 결과가 틀려질 수 있으니 주의해야 한다. ROUND 함수를 사용하여 소수점을 표시하거나 반올림할 수 있고, TRUNC 함수를 사용하여 소수점을 절사 할 수 있다.