본문 바로가기
Computer/Algorithm_SQL

[Programmers] 자동차 대여 기록에서 장기/단기 대여 구분하기 (Success)

by HJ0216 2023. 9. 15.
 

프로그래머스

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

programmers.co.kr

 

📝 Language: Oracle

 

1
2
3
4
5
6
7
8
9
10
11
12
  SELECT HISTORY_ID, 
         CAR_ID, 
         TO_CHAR(START_DATE, 'YYYY-MM-DD') START_DATE, 
         TO_CHAR(END_DATE, 'YYYY-MM-DD') END_DATE,
         CASE
             WHEN (END_DATE-START_DATE) >= 30 THEN '장기 대여'
             ELSE '단기 대여'
         END RENT_TYPE
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
   WHERE TO_CHAR(START_DATE, 'YYYY-MM'= '2022-09'
ORDER BY HISTORY_ID DESC;
 
 

🙂 확인 사항

1. CAR_RENTAL_COMPANY_RENTAL_HISTORY  테이블

2. 대여 시작일이 2022년 9월

3. 대여 기간이 30일 이상 - 장기 대여 / 30일 미만 - 단기 대여

4. 컬럼명은 RENT_TYPE

5. 전체 컬럼에 RENT_TYPE 추가

6. 대여 기록 ID 기준 내림차순 정렬

+ START_DATE, END_DATE 데이터 형태 및 컬럼명 유의

 

😮  외의 풀이

1
2
3
4
5
6
7
8
9
10
11
12
  SELECT HISTORY_ID, 
         CAR_ID, 
         TO_CHAR(START_DATE, 'YYYY-MM-DD') START_DATE, 
         TO_CHAR(END_DATE, 'YYYY-MM-DD') END_DATE,
         CASE
           WHEN EXTRACT(DAY FROM NUMTODSINTERVAL((END_DATE - START_DATE), 'DAY TO SECOND')) >= 30 THEN '장기 대여'
           ELSE '단기 대여'
         END RENT_TYPE
    FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
   WHERE TO_CHAR(START_DATE, 'YYYY-MM'= '2022-09'
ORDER BY HISTORY_ID DESC;
 
 

- NUMTODSINTERVAL(expr, 'DAY TO SECOND')

    - 숫자를 시간 간격 데이터 형식으로 변환

    - DAY TO SECOND: 일(DAY)부터 초(SECOND)까지의 시간 간격

- EXTRACT(DAY FROM ... )

    - 시간 간격 데이터에서 특정 요소를 추출하는 데 사용 - 여기서는 일(DAY)을 추출

 

 

 

🔗 소스 코드
GitHub