Oracle

[ORACLE] 날짜관련

ziziDev 2025. 5. 13. 15:45
반응형

1️⃣ 날짜 차이 계산 (END_DATE - START_DATE)

  • Oracle에서는 날짜끼리 빼면 자동으로 "일 수"가 반환됨.
  • END_DATE - START_DATE → 두 날짜 간의 일수 차이(소수점 포함).
SELECT END_DATE, START_DATE, END_DATE - START_DATE AS DAYS_DIFF
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;

🔹 예제 결과

END_DATE START_DATE DAYS_DIFF
2024-04-05 2024-04-01
2024-04-10 2024-04-03 7

주의: END_DATE - START_DATE는 기본적으로 시간(시:분:초) 차이까지 포함할 수 있어서 TRUNC()로 정리하는 게 좋음.

SELECT TRUNC(END_DATE) - TRUNC(START_DATE) AS DAYS_DIFF
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;

 

2️⃣ TRUNC() vs ROUND()

  • 날짜에서 TRUNC(날짜)를 하면 시간(시:분:초)을 제거하고 날짜만 남음.

  • ROUND(날짜)오전 12시 기준으로 반올림.
SELECT TRUNC(SYSDATE), ROUND(SYSDATE) FROM DUAL;

 

예제 결과

TRUNC(SYSDATE) ROUND(SYSDATE)
2024-04-01 00:00:00 2024-04-02 00:00:00

주의: ROUND()정오(12:00) 이전이면 이전 날짜, 이후면 다음 날짜로 반올림됨.

3️⃣ 날짜에서 특정 단위 차이 구하기 (MONTHS_BETWEEN, EXTRACT)

  • MONTHS_BETWEEN(END_DATE, START_DATE) → 개월 차이 반환 (소수점 포함)

  • EXTRACT(YEAR FROM DATE) → 연도 추출

  • EXTRACT(MONTH FROM DATE) → 월 추출
SELECT MONTHS_BETWEEN(DATE '2024-12-01', DATE '2024-01-01') AS MONTH_DIFF
FROM DUAL;

🔹 예제 결과 : 11

 

4️⃣ 날짜를 더하거나 빼는 연산

  • 날짜 + 숫자 → 일(day) 단위로 더하기

  • 날짜 - 숫자 → 일(day) 단위로 빼기

  • ADD_MONTHS(날짜, 개월 수) → 개월 단위로 날짜 이동
SELECT SYSDATE AS TODAY,
      SYSDATE + 7 AS NEXT_WEEK,
      ADD_MONTHS(SYSDATE, 3) AS THREE_MONTHS_LATER
FROM DUAL;

🔹 예제 결과

TODAY NEXT_WEEK THREE_MONTHS_LATER
2024-04-01 2024-04-08 2024-07-01

SYSDATE + 7 같은 계산은 자동으로 날짜 연산 가능!

5️⃣ 시간 차이 구하기 (NUMTODSINTERVAL)

Oracle에서는 시간 단위 차이를 구할 때 NUMTODSINTERVAL(숫자, 'DAY' | 'HOUR' | 'MINUTE' | 'SECOND')를 사용.

SELECT NUMTODSINTERVAL(END_DATE - START_DATE, 'DAY') AS TIME_DIFF
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;

🔹 예제 결과

TIME_DIFF
+04 00:00:00
+07 00:00:00

이렇게 하면 날짜 차이를 "시:분:초"까지 변환 가능!
















🔥 요약

기능 방법
날짜 차이 (일) END_DATE - START_DATE
개월 차이 MONTHS_BETWEEN(END_DATE, START_DATE)
연도/월/일 추출 EXTRACT(YEAR FROM DATE)
날짜에서 시간 제거 TRUNC(DATE)
날짜 반올림 ROUND(DATE)
날짜 더하기 날짜 + 숫자
개월 더하기 ADD_MONTHS(DATE, 개월수)
시간 차이 `NUMTODSINTERVAL(날짜 차이, 'DAY'


반응형