- WHERE 절에서 대여 시작일이 2022년 9월에 속하는 데이터를 추출한다.
- DATEDIFF 함수를 이용하여 대여 기간을 구한다.
- IF 함수를 이용하여 대여 기간이 30일 이상이면 '장기 대여', 그렇지 않으면 '단기 대여'로 표시한다.
- AS를 이용하여 컬럼 명을 RENT_TYPE로 작성한다.
- 주의 사항을 참고하여 START_DATE, END_DATE의 포맷을 정리한다.
- 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일이 되어야 하는 방식이다.