728x90
반응형
코딩테스트 연습 > String, Date > 자동차 대여 기록에서 장기/단기 대여 구분하기
난이도: Lv.1
언어: MySQL
https://school.programmers.co.kr/learn/courses/30/lessons/151138
실패
SELECT
a.HISTORY_ID
, a.CAR_ID
, DATE_FORMAT(a.START_DATE, '%Y-%m-%d') AS START_DATE
, DATE_FORMAT(a.END_DATE, '%Y-%m-%d') AS END_DATE
, IF(DATEDIFF(a.END_DATE, a.START_DATE) >= 30, '장기대여', '단기대여') AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY a
WHERE 1=1
AND DATE_FORMAT(a.START_DATE, '%Y-%m') LIKE '2022-09'
# AND a.START_DATE LIKE '2022-09%'
ORDER BY HISTORY_ID DESC
실패이유
1. 날짜는 현재 하루를 포함해야함
1월 30일에서 1월 1일을 빼면 29일이 나옴(산수에서 30-29)
즉, 단순히 END_DATE - START_DATE를 하면 빌린 날(1일)을 포함하지 않음
2. 띄어쓰기에 주의해야함
문제에 '장기 대여', '단기 대여'로 나와있으나, '장기대여', '단기대여'로 작성하여 계속 실패를 만났음.
성공
SELECT
a.HISTORY_ID
, a.CAR_ID
, DATE_FORMAT(a.START_DATE, '%Y-%m-%d') AS START_DATE
, DATE_FORMAT(a.END_DATE, '%Y-%m-%d') AS END_DATE
, IF(DATEDIFF(a.END_DATE, a.START_DATE) >= 29, '장기 대여', '단기 대여') AS RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY a
WHERE 1=1
AND DATE_FORMAT(a.START_DATE, '%Y-%m') = '2022-09'
# AND a.START_DATE LIKE '2022-09-%'
ORDER BY HISTORY_ID DESC
DATE_FORMAT이 아닌, 주석으로 처리한 LIKE절로 처리해도 잘 됩니다.
그러나 날짜계산이기에 더 구체적인 DATE_FORMAT 함수를 이용하였습니다.
*참고 chatGPT
없습니다.
코드에 질문이 있으시면 댓글을 달아주세요. 최대한 빠른 시일 내에 답변해드리겠습니다.
봐주셔서 감사합니다.
728x90
반응형
'Study > SQL' 카테고리의 다른 글
[프로그래머스 SQL] 과일로 만든 아이스크림 고르기 (0) | 2024.01.11 |
---|---|
[프로그래머스 SQL] 조건에 맞는 도서 리스트 출력하기 (0) | 2024.01.11 |
[프로그래머스 SQL] 평균 일일 대여 요금 구하기 (0) | 2024.01.11 |
[프로그래머스 SQL] 특정 옵션이 포함된 자동차 리스트 구하기 (1) | 2024.01.11 |
[프로그래머스 SQL] 조건에 부합하는 중고거래 댓글 조회하기 (0) | 2024.01.11 |