https://school.programmers.co.kr/learn/courses/30/lessons/151138
2022년 9월에 대여를 시작한 기록 중에서
30일 이상 대여는 '장기 대여', 아니면 '단기 대여'로 출력하는 문제이다.
간단하지만 날짜 관련 함수를 정리하고 함정을 하나 조심해야해서 남겨둔다.
날짜 간 차이
DATEDIFF(), TIMEDIFF() 등 월, 시간에 다른 함수들이있다.
하지만 단위 별로 외우느니 다음 함수를 외우는게 나을 것 같다.
TIMESTAMPDIFF()
TIMESTAMPDIFF(단위, 시작일, 종료일)
주의해야할 것은 시작일이 종료일보다 크면 음수가 나온다.
주의해야하는 이유는 위에 언급한 DATEDIFF, TIMEDIFF는 종료일을 앞에 두기 때문.
예를 들어 2024년 3월 29일과 2024년 3월 31일의 날짜 차이를 구하는 코드는
TIMESTAMPDIFF(DAY, '2024-03-29', '2024-03-31') 이 될 것이다.
날짜 계산
특정 날에 증감 연산을 할 수 있는 함수다.
DATE_ADD()
DATE_ADD(날짜, INTERVAL 증감량 단위)
만약 현재를 기준으로 하루를 더하고 싶으면
DATE_ADD(NOW(), INTERVAL 1 DAY)
현재를 기준으로 한달을 빼고 싶으면
DATE_ADD(NOW(), INTERVAL -1 MONTH)
가 될 것이다.
DATE_SUB()도 있긴 하지만 증감량 부호만 바꾸면 되는데 굳이..?
TIMASTAMPDIFF(DAY, START_DATE, END_DATE) + 1 이라고 해줘야 정확한 답이 나온다.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 TIMESTAMPDIFF(DAY, START_DATE, END_DATE) + 1 >= 30 THEN '장기 대여'
ELSE '단기 대여'
END AS RENT_TYPE
FROM
CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE
START_DATE LIKE '2022-09%'
ORDER BY
HISTORY_ID DESC
더 좋은 해결방법이 있다면 언제든 댓글로 알려주세요 🤗