본문 바로가기
IT 지식 개발

oracle 오라클 날짜 계산 시간 방법 3가지(연산자, INTERVAL, 날짜 함수)

by 관리자 2024. 2. 8.

오라클(oracle) 날짜 계산하는 방법을 알아보겠습니다. +와 - 같이 연산자를 이용해서 계산하는 방법이 있고 interval을 활용해서 더 간단하게 시간을 계산할 수 있습니다. 그러면 2가지 방법으로 어떻게 오라클 날짜를 계산하는지 살펴보고, 그 외 날짜 함수 4가지도 함께 알아보겠습니다.

 

연산자로 활용하여 날짜 계산하는 방법

WITH TMPTABLE AS ( 
                   SELECT TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH2424:MI:SS') CUR_DTM
                     FROM DUAL
                  ) 
SELECT CUR_DTM                AS CUR_DTM -- 기준시간
     , CUR_DTM + 5/24         AS HOUR    -- 5시간 더하기  
     , CUR_DTM + 5/(24*60)    AS MIN     -- 5분 더하기 
     , CUR_DTM + 5/(24*60*60) AS SEC     -- 5초 더하기 
  FROM TMPTABLE 
;

연산자 날짜 결과 값

날짜에 N시간, N분, N초를 더하거나 빼려면 N/24 => 1시간, N/(24*60) => 1분, N/(24*60*60) => 1초로 계산하여 값을 구합니다. 

WITH TMPTABLE AS ( 
                   SELECT TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH2424:MI:SS') CUR_DTM
                     FROM DUAL
                  ) 
SELECT CUR_DTM                 AS CUR_DTM -- 기준시간
     , CUR_DTM - 10/24         AS HOUR    -- 10시간 빼기  
     , CUR_DTM - 10/(24*60)    AS MIN     -- 10분 빼기
     , CUR_DTM - 10/(24*60*60) AS SEC     -- 10초 빼기 
  FROM TMPTABLE 
;

연산자 날짜 결과 값

 

 

연산자 활용 예시

SELECT TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS')                               AS "오늘 날짜"
     , TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') + 1                           AS "내일 날짜"
     , TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') -1                            AS "어제 날짜"
     , TRUNC(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'),'DD')                   AS "오늘 정각 날짜"
     , TRUNC(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'),'DD') + 1               AS "내일 정각 날짜"
     , TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') + 1/24/60/60                  AS "1초 뒤 시간"
     , TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') + 1/24/60                     AS "1분 뒤 시간"
     , TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') + 1/24                        AS "1일 뒤 시간"
     , TRUNC(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'),'MM')                   AS "이번 달 시작날짜"
     , LAST_DAY(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'))                     AS "이번 달 마지막 날"
     , TRUNC(ADD_MONTHS(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), + 1),'MM')  AS "다음 달 시작날짜"
     , ADD_MONTHS(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1)                AS "다음달 오늘 날자"
     , TRUNC(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY')                AS "올해 시작 일"
     , TRUNC(ADD_MONTHS(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), -12), 'DD') AS "작년 현재 일"
     , TO_DATE(TO_CHAR(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), 'YYYY-MM-DD')) - TO_DATE('2021-11-23') AS "두 날짜 사이 일수 계산"
     , MONTHS_BETWEEN(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), '2021-10-25')             AS "두 날짜 사이의 월수 계산"
     , TRUNC(MONTHS_BETWEEN(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), '2020-11-23')/12,0) AS "두 날짜 사이의 년수 계산"
 FROM DUAL
 ;

연산자 방법도 있지만 더 간단하게 INTERVAL을 활용하여 간단하게 작성하고 값을 구할 수 있습니다.

 

INTERVAL 활용하여 날짜 계산하는 방법

WITH TMPTABLE AS (
                   SELECT TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') CUR_DTM
                     FROM DUAL 
                  )
SELECT CUR_DTM                         AS CUR_DTM -- 기준시간
     , CUR_DTM + (INTERVAL '5' HOUR)   AS HOUR    -- 5시간 더하기
     , CUR_DTM + (INTERVAL '5' MINUTE) AS MIN     -- 5분 더하기
     , CUR_DTM + (INTERVAL '5' SECOND) AS SEC     -- 5초 더하기
  FROM TMPTABLE
;

interval 날짜 결과 값

 

WITH TMPTABLE AS ( 
                   SELECT TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH2424:MI:SS') CUR_DTM
                     FROM DUAL
                  ) 
SELECT CUR_DTM                 AS CUR_DTM -- 기준시간
     , CUR_DTM - 10/24         AS HOUR    -- 10시간 빼기  
     , CUR_DTM - 10/(24*60)    AS MIN     -- 10분 빼기
     , CUR_DTM - 10/(24*60*60) AS SEC     -- 10초 빼기 
  FROM TMPTABLE 
;

interval 날짜 결과 값

 

INTERVAL 활용 예시

SELECT TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') + (INTERVAL '1' YEAR)                 AS YEAR_ADD          -- 1년 더하기
     , TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') + (INTERVAL '2' MONTH)                AS MONTH_ADD         -- 2개월 더하기
     , TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') + (INTERVAL '3' DAY)                  AS DAY_ADD           -- 3일 더하기
     , TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') + (INTERVAL '4' HOUR)                 AS HOUR_ADD          -- 4시간 더하기
     , TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') + (INTERVAL '5' MINUTE)               AS MINUTE_ADD        -- 5분 더하기
     , TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') + (INTERVAL '10' SECOND)              AS SECOND_ADD        -- 10초 더하기
     , TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') + (INTERVAL '02:30' HOUR TO MINUTE)   AS HOUR_MINUTE_ADD   -- 2시간 30분 더하기
     , TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS') + (INTERVAL '03:05' MINUTE TO SECOND) AS MINUTE_SECOND_ADD -- 3분5초 더하기
  FROM DUAL
;

interval 결과 값

 

oracle interval에 대해서 더 자세하게 알고 싶으시다면 아래 사이트에서 공부해보시면 좋을 것 같습니다.

https://www.oracletutorial.com/oracle-basics/oracle-interval/

 

Oracle INTERVAL: A Beginner's Guide

This tutorial introduces you to the Oracle INTERVAL data types and shows you how to handle interval data effectively.

www.oracletutorial.com

 

 

 

날짜 함수 활용하여 계산하는 방법

SELECT ADD_MONTHS(SYSDATE, 1) ADD_MONTHS -- ADD_MONTHS(DATE, INTEGER)
     , LAST_DAY(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS')) LAST_DAY -- LAST_DAY(DATE)
     , NEXT_DAY(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), 1) NEXT_DAY--NEXT_DAY(DATE, CHAR)
     , MONTHS_BETWEEN(TO_DATE('2021-11-25 09:00:00', 'YYYY-MM-DD HH24:MI:SS'), TO_DATE('2021-10-25 10:00:00', 'YYYY-MM-DD HH24:MI:SS')) MONTHS_BETWEEN --MONTHS_BETWEEN(DATE1, DATE2)
  FROM DUAL
;

날짜 함수 계산 결과

1. ADD_MONTHS(DATE, INTEGER)

ADD_MONTHS 함수는 해당 날짜(DATE)에 월(INTERGER)이 더해지는 함수입니다.

 

2. LAST_DAY(DATE)

LASTE_DAY 함수는 해당 날짜(DATE)의 월의 마지막 일자를 조회하는 함수입니다.

 

3. NEXT_DAY(DATE, INTEGER)

NEXT_DAY 함수는 해당날짜를 DATE에 넣고 해당 날짜의 다음 주 INTEGER(요일)의 날짜를 조회합니다. 1은 일요일, 2는 월요일, 3은 화요일, 4는 수요일, 5는 목요일, 6은 금요일, 7은 토요일입니다.

 

4. MONTHS_BETWEEN(DATE1, DATE2)

MONTHS_BETWEEN 함수는 DATE1과 DATE2 사이의 개월 수를 조회하는데, DATE1 > DATE2 이어야 +개월수로 나옵니다.