[MYSQL] 자동차 대여 기록에서 장기/단기 대여 구분하기

xianxbabx·2023년 1월 17일
0

MYSQL

목록 보기
2/8

문제 설명

문제

주의 사항

예시

풀이

  1. WHERE 절에서 대여 시작일이 2022년 9월에 속하는 데이터를 추출한다.
  1. DATEDIFF 함수를 이용하여 대여 기간을 구한다.
  1. IF 함수를 이용하여 대여 기간이 30일 이상이면 '장기 대여', 그렇지 않으면 '단기 대여'로 표시한다.
  1. AS를 이용하여 컬럼 명을 RENT_TYPE로 작성한다.
  1. 주의 사항을 참고하여 START_DATE, END_DATE의 포맷을 정리한다.
  1. ORDER BY 절을 이용하여 기록 ID 기준으로 내림차순 정렬한다.

나의 코드

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, 
       IF(DATEDIFF(END_DATE, START_DATE) >= 29, '장기 대여', '단기 대여') AS REND_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE MONTH(START_DATE) = 9
ORDER BY HISTORY_ID DESC;

나의 조그마한 실수 😅

처음에 DATEDIFF 함수를 쓰지 않고 그냥 날짜-날짜를 해버렸다. 두 날짜의 일 수 차이를 구하려면 DATEDIFF를 사용해야 한다. 다른 단위의 차이를 구하려면 TIMESTAMPDIFF 함수를 사용하면 된다.

또한, 30일 이상이라고 했기 때문에 30을 넣으니 틀렸다고 나왔다.
우리가 숫자를 빼고 +1 하는 것 처럼, 날짜도 두 날짜를 뺄셈 한 다음 +1 해줘야 하니까 오른쪽 항으로 이항하면 30이 아니라 29가 된다.
30이 아니라 29로 바꾸면 정답이 된다.
DATE(END_DATE, START_DATE) + 1 >= 30 해도 정답이 된다.

위를 보면, 2022/08/01에 빌려, 2022/08/02에 반납을 한다. 하지만 대여날짜를 보면 1일이라고 되어있기 때문에, +1을 해야 하는 이유이다.

+같은 날짜에 반납하면 0일이 아니라 1일이 되어야 하는 방식이다.

0개의 댓글