오라클(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
;
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 활용 예시
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
;
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 이어야 +개월수로 나옵니다.