SIU
article thumbnail
Published 2023. 3. 23. 23:56
SQL 스터디 1일차 SQL

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

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

 

프로그래머스

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

programmers.co.kr

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(END_DATE,START_DATE) + 1 >= 30 THEN "장기 대여"
        ELSE "단기 대여" END AS RENT_TYPE
  FROM  CAR_RENTAL_COMPANY_RENTAL_HISTORY
 WHERE DATE_FORMAT(START_DATE, "%Y-%m") = "2022-09"
 ORDER BY  HISTORY_ID DESC
  • #DATEDIFF : 두 날짜의 차이 계산(END-START)
    • 날짜 차이를 구할때  2/7~2/7을 0으로 계산하기 때문에 1을 더해줘야한다.
    • DATEDIFF() 사용하여 날짜 수 계산함 (9월 28일에 빌려서 동일 날짜에 반납해도 1일로 간주하므로 +1 필요함)
  •  ※자주하는 실수인데 한달 일수를 구하는데 31일 - 1일을 하면 30일이 된다.
  •  IF 조건 A ELSE B  문과도 같은 CASE WHEN 조건 THEN A ELSE B

 

WHERE
	START_DATE LIKE '2022-09%'
    
 
 WHERE
    START_DATE BETWEEN '2022-09-01' AND '2022-09-30'
    
    
 WHERE 
 	DATE_FORMAT(START_DATE, "%Y-%m") = "2022-09"
    
    
  WHERE  
  	TO_CHAR(START_DATE , 'YYYY-MM-DD') LIKE '2022-09%'
    
 WHERE  
  	TO_CHAR(START_DATE , 'YYYY-MM') LIKE '2022-09'
  • 여러 날짜 표현 방법 (조건 : 2022년 9월)
  • DATE_FORMAT(날짜, 형식)

 

IF(DATEDIFF(END_DATE,START_DATE)>=29,'장기 대여','단기 대여') RENT_TYPE


CASE WHEN DATEDIFF(END_DATE,START_DATE) + 1 >= 30 THEN "장기 대여"
ELSE "단기 대여" END AS RENT_TYPE
# WHEN DATEDIFF(END_DATE,START_DATE) + 1 < 30 THEN "단기 대여" END AS RENT_TYPE
  • 조건이 2개 일 때 : IF 조건식
    • if (조건,참일떄 ,거짓일떄)
  • 다중 조건 : CASE WHEN은 ELSE 마지막에 END를 꼭 붙여야 한다.

CASE
WHEN 조건 1
THEN ‘조건 1 만족 시 반환하는 값’
WHEN 조건 2
THEN ‘조건 2 만족 시 반환하는 값’
ELSE ‘조건들에 만족 안 하는 경우 반환 값’
END
profile

SIU

@웹 개발자 SIU

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!