[Oracle] 오라클 날짜, 시간 차이 계산 방법 (DATEDIFF)

오라클에서 날짜 및 시간의 차이를 계산하기 위해서는 수치를 계산하듯 종료일자에서 시작일자를 빼주면 된다. 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-012021-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 함수를 사용하여 소수점을 절사 할 수 있다.

 

 

댓글

Designed by JB FACTORY