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

박경희·2023년 12월 29일

코딩테스트

목록 보기
10/69


풀이

1. 시작일이 9월에 속한값 조회

SELECT 
	START_DATE, 
    END_DATE
FROM 
	CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE 
	DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
ORDER BY 
	HISTORY_ID DESC

DATE_FORMAT을 사용하여 원하는 날짜 조회.

2. 주의사항 - 데이트 포맷과 동일하게 출력

SELECT 
    DATE_FORMAT(START_DATE, '%Y-%m-%d'),
    DATE_FORMAT(END_DATE, '%Y-%m-%d')
FROM 
	CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE 
	DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
ORDER BY HISTORY_ID DESC

  • 원하는 컬럼 값으로 출력해야 하기 떄문에 as로 별칭 넣어주기.
SELECT
    DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE,
    DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE
FROM 
	CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE 
	DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
ORDER BY HISTORY_ID DESC

3. 날짜 사이값 계산 - DATEDIFF

DATEDIFF(날짜1, 날짜2) 형식으로 작성하면 날짜1 - 날짜2로 계산된다.

DATEDIFF(END_DATE, START_DATE)

4. 새 컬럼 추가하기

CASE  
    WHEN DATEDIFF(END_DATE, START_DATE)  >= 29 
    THEN '장기 대여' // 컬럼값 지정
    ELSE '단기 대여'
    END AS RENT_TYPE //컬럼명 지정

정답

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)  >= 29 
        THEN '장기 대여'
        ELSE '단기 대여'
        END AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE DATE_FORMAT(START_DATE, '%Y-%m') = '2022-09'
ORDER BY HISTORY_ID DESC;

✅ 당일 빌리고 제출한 것은 0일이 아니라 1일이기 때문에 30이 아닌 29를 적어주거나

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

을 해줘도 된다.

✅ 띄어쓰기를 잘하자.

  • 장기대여 가 아니라 장기 대여 였다.......^-----^

아무리 봐도 틀린게 없어보였는데도 제출하면 오답으로 나와서 풀이를 살펴보던중 '띄어쓰기'에 대한 조언을 해주신 분이 있어서 '설마,,'하고 살펴보니 나도 띄어쓰기가 안되었었다. 하하
이번을 계기로 띄어쓰기도 중요하게 잘 봐야한다는 깨달음을 얻었다.

0개의 댓글