카테고리 없음
오라클 날짜 계산 예제 (CURRENT_DATE VS SYSDATE )
광82
2023. 9. 21. 17:15
반응형
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_DATE와 SYSDATE으로 제공한다. 이때 유의할 점은 SYSDATE는 데이터서버 시간이고 CURRENT_DATE는 사용자 세션의 시간으로 다르다는 것이다.
예를들어, 접속하는 사용자와 데이터서버가 UTC 시간 차이가 난다면, 두 데이트는 차이가 발생한다. 영국(UTC+0)에 데이터서버가 있고 한국(UTC+9)에서 접속한다면 CURRENT_DATE는 SYSDATE와 +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하여 정수로 리턴할 수 있다.
반응형