미소를뿌리는감자의 코딩

[프로그래머스 2024/01/26] 자동차 대여 기록에서 장기/단개 대여 구분하기 본문

코딩 테스트/프로그래머스

[프로그래머스 2024/01/26] 자동차 대여 기록에서 장기/단개 대여 구분하기

미뿌감 2024. 1. 26. 17:24
728x90

https://school.programmers.co.kr/learn/courses/30/lessons/151138

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

1. 접근 방법

이번 문제는 타 문제들에 비해 시간을 많이 쓰고, 조금 헤맸던 문제이다.

 

다른 부분들을 수월히 작성하고, 장기 대여. 단기 대여 구분하는 곳에서 조금 문제가 있었다.

 

그래서, 월별로 구분해서,,, 또 day랑 month로 나눠서 계산을 하다가 뭔가

잘못 접근하고 있는 것 같다는 느낌이 왔다.

SELECT * from (SELECT substring_index(substring(END_DATE,6,10),'-',1) as month, substring_index(substring(END_DATE,6,10),'-',-1) as day, substring_index(substring(START_DATE,6,10),'-',-1) as day_sep from CAR_RENTAL_COMPANY_RENTAL_HISTORY) b
where b.month >= 10 and day-day_sep>=1

 

위는 내가 DATEDIFF 함수를 알기 전, 헤매다가 썼던 코드이다. 

 

결론적으로 말하면, DATEDIFF(END_DATE, START_DATE) 를 사용하면 된다.

 when DATEDIFF(END_DATE, START_DATE) >=29 then '장기 대여'
          else '단기 대여' end

이런식으로 작성되게 된다.

여기서 >=는 30이 아니라 29 이다.

24일 -23일 = 2일 동안 대출한 것이기 때문이다.

24-23 = 1으로 계산 할 것을 생각해서, >=29로 명시해줘야 한다.

 

2. 코드

SELECT HISTORY_ID, 
       CAR_ID, 
       substring(START_DATE, 1, 10) as START_DATE, 
       substring(END_DATE, 1, 10) as END_DATE, 
       case
          when DATEDIFF(END_DATE, START_DATE) >=29 then '장기 대여'
          else '단기 대여' end
       as RENT_TYPE from CAR_RENTAL_COMPANY_RENTAL_HISTORY
where START_DATE like '2022-09%'
order by HISTORY_ID desc

 

728x90