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

쥬쥬스·2023년 8월 7일
0

SQL

목록 보기
29/67
post-thumbnail

문제
CAR_RENTAL_COMPANY_RENTAL_HISTORY 테이블에서 대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 대여 기간이 30일 이상이면 '장기 대여' 그렇지 않으면 '단기 대여' 로 표시하는 컬럼(컬럼명: RENT_TYPE)을 추가하여 대여기록을 출력하는 SQL문을 작성해주세요. 결과는 대여 기록 ID를 기준으로 내림차순 정렬해주세요.
START_DATE와 END_DATE의 경우 예시의 데이트 포맷과 동일해야 정답처리 됩니다.

💻 조건

  • 대여 시작일이 9월
  • 대여 기록이 30일 이상이면 장기, 아니면 단기
  • 기존 테이블 + 대여기록 출력
  • 대여 기록 ID를 기준으로 내림차순
  • 날짜 타입은 년-월-일로 시간 출력X

sql 코드

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)+1>=30, '장기 대여', '단기 대여') AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC
  1. 대여 시작일이 9월
    '2022-09%'로 작성해서 9월인 경우는 모두 출력해준다

  2. 대여 기록이 30일 이상인지 미만인지
    이 부분이 조금 까다롭게 느껴졌다.
    1) 날짜 차이 = DATEDIFF(날짜1, 날짜2)
    - 이 경우 날짜1 - 날짜2 가 된다.
    2) 차이를 구하고 나서 +1을 해주어야 정확한 기간을 구할 수 있다.
    - 만약 8월 20일에서 8월 15일을 빼준다고 하면 5일이 나오는데 사실상 날짜를 세면 6일이 차이가 난다. 이점을 간과하지 말자.. 단순 계산이 아닌 기간을 구하는 것이므로!
    3) IF를 사용해서 30일 이상이면 '장기 대여', 아니면 '단기 대여'를 출력해준다.

  3. 기존 테이블에 대여기록 합하기
    '*'을 사용하고, RENT_TYPE을 출력하려고 했으나 날짜 타입을 변경해야하므로 각각 작성해주었다.

  4. 대여기록 기준 내림차순
    대여 기록은 HISTORY_ID, 내림차순은 DESC

  5. 날짜 타입 변경
    DATE_FORMAT을 사용해서 설정해준다. %M과 %m은 차이가 있으므로 항상 주의해서 사용할 것!! 대문자로 설정해두고 그냥 작성해서 잘못 출력되는 일이 많았다.

profile
느려도... 꾸준히.....🐌

0개의 댓글