Small Grey Outline Pointer 자동차 대여 기록에서 장기/단기 대여 구분하기
본문 바로가기
Dev./SQL

자동차 대여 기록에서 장기/단기 대여 구분하기

by sso. 2024. 3. 28.

 

 

일단 시작을 이렇게 해놓고 생각하기

SELECT HISTORY_ID, CAR_ID, START_DATE, END_DATE, RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY


ORDER BY HISTORY_ID DESC;

 

 

✅대여 시작일이 2022년 9월에 속하는 대여 기록에 대해서 찾기

WHERE START_DATE LIKE '2022-09%'

 

 

여기까지 해서 다시 짜봄 

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, RENT_TYPE
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE START_DATE LIKE '2022-09%'

ORDER BY HISTORY_ID DESC;

 

 

 

✅날짜 사이의 기간을 구하기

DATEDIFF(HOUR, '2022-09-01', '2022-10-01') //시간 차이
DATEDIFF(DAY, '2022-09-01', '2022-10-01') //일 차이

DATEDIFF(END_DATE, START_DATE) >= 29 //29일 차이

 

 

✅30일 이상이면 장기대여, 그렇지 않으면 단기대여로 분류하기 

IF, ELSE 처리를 해야하는 것 같은데 SQL에서 어떻게 작성하는지 찾아본다!

 

CASE
	WHEN 조건1 THEN '조건1 반환값'
	WHEN 조건2 THEN '조건2 반환값'
	ELSE '충족되는 조건 없을 때 반환값'
END

 

CASE
    WHEN DATEDIFF(END_DATE, START_DATE) >= 29 THEN '장기 대여'
    ELSE '단기 대여'
END AS RENT_TYPE //반환값

RENT_TYPE은 반환값으로 들어가니까 SELECT에 쓰면 안됐었다! 수정...

 

 

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(START_DATE, END_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;

이렇게 했는데 틀려서 다시 찾아보기로 한다

 

 

 

다른사람 풀이

IF문

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 DATE_FORMAT(START_DATE,'%Y-%m') = '2022-09'
ORDER BY history_id DESC

 

728x90

댓글