반응형
오라클에서 날짜를 계산하는 방법은
ADD_MONTHS, +로 값을 넣어주는 방법과
INTERVAL을 이용한 방법이 있는데
일단 안좋은 방법인
ADD_MONTHS, +를 이용한 방법을 보자면
sysdate가 아닐 경우 TO_DATE로 date 타입으로 만들어준 뒤
ADD_MONTH(값, 1)을 하면 1달을 더하게 되고
12를 입력해주면 1년을 더하게 된다
반대로 빼려면 +만 -로 바꿔주면 된다
다음으로 일, 시간, 분, 초는 +-로 추가해야 하는데
1은 1일 1/24는 1시간 1/1440은 1분 1/86400은 1초가 되겠다
근데 딱 보면 알겠지만
이런 식으로 하면 불편하다..
반면 INTERVAL을 사용하면
날짜 덧셈 뺄셈을 훨씬 편하게 할 수 있는데
값 + INTERVAL '값' 년/월/일/시/분/초
만 입력해주면 끝이고 해당하는 값은 아래와 같다
년 - YEAR
월 - MONTH
일 - DAY
시 - HOUR
분 - MINUTE
초 - SECOND
그리고 년부터 월까지 / 일부터 초까지
한번에 덧셈 뺄셈이 가능한데
INTERVAL '년-월' YEAR TO MONTH
INTERVAL '일 시:분:초' DAY TO SECOND
를 사용해주면 된다
날짜 계산 시에는
INTERVAL을 이용한 방법이 엄청나게 편하기 때문에
이 방법을 사용하는 것을 권장한다
마지막으로 예제에 사용한 쿼리는 아래와 같다
-- 오라클 날짜 더하기 빼기
WITH TBL AS (
SELECT '2011-11-11 10:00:00' AS DT FROM DUAL
)
SELECT TO_CHAR(ADD_MONTHS(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS'), 12), 'YYYY-MM-DD') YR -- 년
, TO_CHAR(ADD_MONTHS(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS'), 1), 'YYYY-MM-DD') MON -- 월
, TO_CHAR(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS') + 1, 'YYYY-MM-DD') AS DAY -- 일
, TO_CHAR(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS') + 1/24, 'HH24:MI:SS') AS HR -- 시간
, TO_CHAR(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS') + 1/1440, 'HH24:MI:SS') AS MIN -- 분
, TO_CHAR(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS') + 1/86400, 'HH24:MI:SS') AS SEC -- 초
FROM TBL
;
-- 오라클 INTERVAL을 이용한 날짜 더하기 빼기
WITH TBL AS (
SELECT '2011-11-11 10:00:00' AS DT FROM DUAL
)
SELECT TO_CHAR(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS') + INTERVAL '1' YEAR, 'YYYY-MM-DD') AS YR
, TO_CHAR(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS') + INTERVAL '1' MONTH, 'YYYY-MM-DD') AS MON
, TO_CHAR(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS') + INTERVAL '1' DAY, 'YYYY-MM-DD') AS DAY
, TO_CHAR(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS') + INTERVAL '1' HOUR, 'HH24:MI:SS') AS HR
, TO_CHAR(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS') + INTERVAL '1' MINUTE, 'HH24:MI:SS') AS MIN
, TO_CHAR(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS') + INTERVAL '1' SECOND, 'HH24:MI:SS') AS SEC
, TO_CHAR(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS') + INTERVAL '1 01:01:01' DAY TO SECOND
, 'YYYY-MM-DD HH24:MI:SS') AS DAY_TO_SECOND
, TO_CHAR(TO_DATE(DT, 'YYYY-MM-DD HH24:MI:SS') + INTERVAL '89-3' YEAR TO MONTH
, 'YYYY-MM-DD') AS YEAR_TO_MONTH
FROM TBL
;
반응형
'SQL > Oracle' 카테고리의 다른 글
오라클 대소문자 구분 없이 조회 방법 (0) | 2020.12.15 |
---|---|
오라클 컬럼에서 숫자 문자 데이터만 추출방법 정리 (0) | 2020.12.09 |
오라클 REPLACE 여러개 사용방법 (REGEXP_REPLACE) (0) | 2020.12.02 |
오라클 REPLACE 함수 사용방법 (0) | 2020.12.02 |
오라클 조회결과 없어도 출력시키는 방법 (0) | 2020.12.01 |
댓글