본문 바로가기
프로그래밍/데이터베이스

Oracle 두 날짜 사이의 일수 차이 와 분 차이 구하기

by pentode 2018. 4. 20.

오라클에서 두 날짜 사이의 차이 일수를 구하는 방법은 간단합니다. 단순히 두 날짜를 빼주면 되겠습니다. 이때 주의할 점은 날짜 빼기를 하면 시간 부분도 계산이 되기 때문에 소숫점 숫자가 됩니다.


SELECT SYSDATE - TO_DATE('20171110', 'YYYYMMDD') FROM DUAL;


결과)

11.96041666666666666666666666666666666667




TO_DATE('20171110', 'YYYYMMDD') 부분은 시간 부분이 모두 0 이지만 SYSDATE 는 시간 부분이 있기 때문에 소수점 숫자가 나오게 됩니다. 단순히 날짜의 차이만을 구하기 위해서는 시간부분을 모두 0으로 처리해야 합니다. 다음과 같이 할 수 있습니다.


SELECT TRUNC(SYSDATE) - TO_DATE('20171110', 'YYYYMMDD') FROM DUAL;


결과)

11


TRUNC() 함수를 날짜에 사용하면 년월일만 남기고 시간부분은 모두 0으로 잘라 버립니다.



TIMESTAMP 형식의 데이터로부터 차이를 구하기 위해서는 DATE 타입으로 형변환하여 계산하면 되겠습니다.


SELECT TRUNC(CAST(TS2 AS DATE)) - TRUNC(CAST(TS1 AS DATE)) FROM DUAL;


-- or


SELECT TO_DATE(TO_CHAR(TS2,'YYYYMMDD'),'YYYYMMDD') - TO_DATE(TO_CHAR(TS1,'YYYYMMDD'),'YYYYMMDD') FROM DUAL;


문자열로 되어 있는 두 날짜의 차이는 구하는 방법입니다. 시간 부분이 없으므로 간단히 처리 됩니다.


SELECT TO_DATE('2017-12-02','YYYY-MM-DD') -  TO_DATE('2017-11-29', 'YYYY-MM-DD') FROM DUAL;


결과)

3


분단위의 차이를 구하기 위해서는 다음과 같이 계산 합니다. 역시 초단위가 있으면 소숫점 값이 나오므로 단순하게 하기 위해서 초단위는 잘라버리고 계산 합니다.


SELECT (TRUNC(SYSDATE, 'MI')-TO_DATE('20171122 00:00:00','YYYYMMDD HH24:MI:SS')) * 1440 FROM DUAL;


날짜의 초단위를 자르기 위해서 TRUNC 함수가 사용되었습니다. TRUNC(SYSDATE, 'MI') 를 사용해서 초단위를 자릅니다. 값을 분으로 변환하기 위해서 1440을 곱해주었습니다. 이 값은 24 * 60 해서 나온 값입니다.

반응형