[Oracle] 오라클 두 날짜 사이 일수 계산 (일, 시, 분 표시)
- 데이터베이스/오라클
- 2024. 6. 9.
오라클 SQL에서 두 날짜 사이의 차이를 계산할 때는 빼기(-) 연산자를 사용하여 두 날짜를 빼 주면 된다. 날짜에 시간이 포함되어 있다면 소수점이 포함된 일수로 반환될 수 있으므로 주의해야 한다. 이를 해결하기 위해 TRUNC 함수를 사용하여 날짜의 시간을 미리 제거하거나, 소수점을 반올림하거나 제거하는 방법이 필요하다. 두 날짜의 차이를 일수뿐만 아니라 시, 분, 초까지 계산하려면 적절한 함수와 계산 공식을 사용하면 된다. 아래의 예시 쿼리를 참고하면 된다.
목차 |
두 날짜 사이 일수 계산하기
SELECT TO_DATE('2024-06-03', 'YYYY-MM-DD')
- TO_DATE('2024-06-01', 'YYYY-MM-DD') AS date_diff
FROM dual
오라클에서는 날짜에서 날짜를 빼면 차이가 일수로 반환된다. 날짜에 시간까지 포함되어 있다면, 시간까지 계산되어 반환되므로 원하는 일수가 반환되지 않을 수 있으니 주의해야 한다.
일수 계산시 시간이 포함되어 있을 경우
SELECT date_diff
, TRUNC(date_diff)
FROM (
SELECT TO_DATE('2024-06-03 18:45:30', 'YYYY-MM-DD HH24:MI:SS')
- TO_DATE('2024-06-01 14:30:00', 'YYYY-MM-DD HH24:MI:SS') AS date_diff
FROM dual
)
연산할 날짜에 시간이 포함되어 있다면, 계산된 일수에 소수점이 생길 수 있다. 소수점이 있는 일수에 TRUNC 함수를 사용하여 소수점을 제거하면 일수만 얻을 수 있지만, 상황에 따라서 ROUND 함수를 사용하여 반올림하여 사용해야 원하는 일수를 얻을 수 있는 경우도 있다. (예, TRUNC(date_diff), ROUND(date_diff) )
소수점 값이 필요 없다면 일수를 계산하기 이전에 TRUNC 함수를 사용하여 날짜의 시간을 미리 제거하는 것이 좋다.
SELECT TRUNC(TO_DATE('2024-06-03 18:45:30', 'YYYY-MM-DD HH24:MI:SS'))
- TRUNC(TO_DATE('2024-06-01 14:30:00', 'YYYY-MM-DD HH24:MI:SS')) AS date_diff
FROM dual
일수 계산 시 시간까지 고려하여 계산할 필요가 없을 경우 TRUNC 함수를 사용하여 날짜의 시간을 제거하고 계산하면 원하는 일수를 얻을 수 있다.
일수 뿐만 아니라 시, 분, 초 까지 계산하기
SELECT TRUNC(date_diff) AS days
, TRUNC(MOD(date_diff * 24, 24)) AS hours
, TRUNC(MOD(date_diff * 24 * 60, 60)) AS minutes
, TRUNC(MOD(date_diff * 24 * 60 * 60, 60)) AS seconds
FROM (
SELECT TO_DATE('2024-06-03 18:45:30', 'YYYY-MM-DD HH24:MI:SS')
- TO_DATE('2024-06-01 14:30:00', 'YYYY-MM-DD HH24:MI:SS') AS date_diff
FROM dual
)
두 날짜의 차이를 일수뿐만 아니라 시, 분, 초까지 계산해야 한다면, 위의 계산 공식으로 계산할 수 있다.
TRUNC(date_diff) AS days는 날짜 차이의 정수 부분을 추출하여 일수로 반환한다.
TRUNC(MOD( date_diff * 24, 24)) AS hours는 날짜 차이를 시간 단위로 변환한 후, 24로 나눈 나머지를 추출하여 시간을 계산한다.
TRUNC(MOD( date_diff * 24 * 60, 60)) AS minutes는 날짜 차이를 분 단위로 변환한 후, 60으로 나눈 나머지를 추출하여 분을 계산한다.
TRUNC(MOD( date_diff * 24 * 60 * 60, 60)) AS seconds는 날짜 차이를 초 단위로 변환한 후, 60으로 나눈 나머지를 추출하여 초를 계산한다.