본문 바로가기
DataBase

오라클 날짜 계산 방법 예제 및 계산 시 유의할 점 (CURRENT_DATE VS SYSDATE )

by 맑은안개 2022. 1. 29.

1. 연산자 사용 날짜 계산

SELECT CURRENT_DATE,  
       CURRENT_DATE - 1,
       CURRENT_DATE + 1
  FROM DUAL;

CURRENT_DATE           |CURRENT_DATE-1         |CURRENT_DATE+1         |
-----------------------+-----------------------+-----------------------+
2022-01-28 15:23:38.000|2022-01-27 15:23:38.000|2022-01-29 15:23:38.000|  

CURRENT_DATE VS SYSDATE

  오라클은 현재 시간을 CURRENT_DATESYSDATE으로 제공한다. 이때 유의할 점은 SYSDATE데이터서버 시간이고 CURRENT_DATE사용자 세션의 시간으로 다르다는 것이다.
  예를들어, 접속하는 사용자와 데이터서버가 UTC 시간 차이가 난다면, 두 데이트는 차이가 발생한다. 영국(UTC+0)에 데이터서버가 있고 한국(UTC+9)에서 접속한다면 CURRENT_DATESYSDATE+9 Hour 차이가 발생한다.

2. INTERVAL 함수 사용 DAY 날짜 계산

SELECT CURRENT_DATE,
       CURRENT_DATE - 1, 
       CURRENT_DATE - INTERVAL '1' DAY
  FROM DUAL;

CURRENT_DATE           |CURRENT_DATE-1         |CURRENT_DATE-INTERVAL'1'DAY|
-----------------------+-----------------------+---------------------------+
2022-01-28 15:23:53.000|2022-01-27 15:23:53.000|    2022-01-27 15:23:53.000|

INTERVAL함수를 사용하여 한달 전 날짜등을 구하는 것처럼 상대적인 계산이 가능하다.

 SELECT CURRENT_DATE,
       CURRENT_DATE - 30, -- 잘못된 예
       CURRENT_DATE - INTERVAL '1' MONTH
  FROM DUAL;

CURRENT_DATE           |CURRENT_DATE-30        |CURRENT_DATE-INTERVAL'1'MONTH|
-----------------------+-----------------------+-----------------------------+
2022-01-28 15:24:09.000|2021-12-29 15:24:09.000|      2021-12-28 15:24:09.000|  

INTERVAL

INTERVAL함수는 다음과 같이 다양한 형태로 사용할 수 있다.

SELECT INTERVAL '1-8' YEAR TO MONTH FROM DUAL;

INTERVAL'1-8'YEARTOMONTH|
------------------------+
1-8                     |

-- 1 Year, 8 Months
SELECT TRUNC(CURRENT_DATE) + INTERVAL '1-8' YEAR TO MONTH 
  FROM DUAL;

TRUNC(CURRENT_DATE)+INTERVAL'1-8'YEARTOMONTH|
--------------------------------------------+
                     2023-09-28 00:00:00.000|

SELECT CURRENT_DATE
     , CURRENT_DATE + INTERVAL '5 1' DAY TO HOUR
     , CURRENT_DATE + INTERVAL '5 1:20' DAY TO MINUTE
     , CURRENT_DATE + INTERVAL '02:04' HOUR TO MINUTE
  FROM DUAL;      

CURRENT_DATE           |CURRENT_DATE+INTERVAL'51'DAYTOHOUR|CURRENT_DATE+INTERVAL'51:20'DAYTOMINUTE|CURRENT_DATE+INTERVAL'02:04'HOURTOMINUTE|
-----------------------+----------------------------------+---------------------------------------+----------------------------------------+
2022-01-28 16:01:26.000|           2022-02-02 17:01:26.000|                2022-02-02 17:21:26.000|                 2022-01-28 18:05:26.000| 

3. 년, 월, 일 계산

SELECT TRUNC(CURRENT_DATE)
     , TRUNC(CURRENT_DATE) + INTERVAL '1' YEAR AS "+YEAR"
     , TRUNC(CURRENT_DATE) + INTERVAL '2' MONTH AS "+MONTH"
     , TRUNC(CURRENT_DATE) + INTERVAL '3' DAY AS "+DAY"
  FROM DUAL;

TRUNC(CURRENT_DATE)    |+YEAR                  |+MONTH                 |+DAY                   |
-----------------------+-----------------------+-----------------------+-----------------------+
2022-01-28 00:00:00.000|2023-01-28 00:00:00.000|2022-03-28 00:00:00.000|2022-01-31 00:00:00.000|
  • TRUNC를 사용하여 TIME을 0으로 셋팅할 수 있다.
  • 날짜 간 차이(gap)계산 시 DATETIME형태는 소수를 발생하므로 TRUNC하여 정수로 리턴할 수 있다.
반응형