카테고리 없음

[26.04.16 코테/회고(MySQL/Oracle)]-자동차 대여 기록에서 장기/단기 대여 구분하기

지니248 2026. 4. 16. 12:08

Lv1. 자동차 대여 기록에서 장기/단기 대여 구분하기 (MySQL)

링크: https://school.programmers.co.kr/learn/courses/30/lessons/151138

 

내가 작성한 코드

SELECT HISTORY_ID, CAR_ID
       ,DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE
       ,DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE
       ,CASE WHEN DATEDIFF(END_DATE, START_DATE) + 1 >= 30 THEN '장기 대여'
             ELSE '단기 대여' END AS RENT_TYPE
        -- DATEDIFF(END_DATE, START_DATE) >= 29
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
ORDER BY HISTORY_ID DESC;

 

Oracle

SELECT HISTORY_ID, CAR_ID
       ,TO_CHAR(START_DATE, 'YYYY-MM-DD') AS START_DATE
       ,TO_CHAR(END_DATE, 'YYYY-MM-DD') AS END_DATE
       ,CASE WHEN (END_DATE - START_DATE) + 1 >= 30 THEN '장기 대여'
             ELSE '단기 대여' END AS RENT_TYPE
        -- (END_DATE - START_DATE) >= 29
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE TO_CHAR(START_DATE, 'YYYY-MM') = '2022-09'
ORDER BY HISTORY_ID DESC;

 

문제 회고

1. 날짜 차이 계산

- DATEDIFF(END_DATE, START_DATE) + 1 >= 30

   - 빌린 당일에 반납 해도 1일을 대여한 것으로 간주해야 하므로 DATEDIFF의 차이 값에 +1을 더해

     실제 대여 일수를 구한 뒤 30일과 비교한다

- DATEDIFF(END_DATE, START_DATE) >= 29

   - DATEDIFF는 종료일에서 시작일을 뺀 날짜 사이의 차이를 구하는 함수이다

   - 실제 대여 일수가 30일일 때 DATEDIFF의 결과값은 항상 1이 작은 29가 된다

   - 따라서 '대여 기간이 30일 이상' 이라는 조건은 날짜 차이 29 이상 이라는 조건과 논리적으로 동일하므로

     기준값을 29로 설정하여 푼 방식이다

   - 이해하기: DATEDIFF(END_DATE, START_DATE) >= 30 - 1 = 29

2. Oracle의 날짜 계산

- 오라클은 DATEDIFF 같은 별도의 함수를 쓰지 않고 단순 뺼셈만으로 두 날짜 사이의 차이를 구할 수 있다