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
하여 정수로 리턴할 수 있다.
반응형
'DataBase' 카테고리의 다른 글
MySql - 특정 문자 위치 기준, 문자열 자르기(substr, position, substring_index) (0) | 2022.08.31 |
---|---|
Oracle - sysdate timezone 목록 조회 및 변경 (0) | 2022.07.04 |
오라클 연속된 날짜 레코드 생성하기( EXTRACT, LEVEL 활용법 ) (0) | 2022.01.28 |
MySql - Public Key Retrieval is not allowed 오류 해결 (0) | 2022.01.27 |
오라클 계층형 쿼리, 트리구조로 살펴보기(정렬, 최하위노드 찾기) (0) | 2022.01.26 |