SQL 연습 - 시간 차이는 무조건 DATEDIFF, MYSQL의 if문-
1. 문제
코딩테스트 연습 - 자동차 대여 기록에서 장기/단기 대여 구분하기 | 프로그래머스 스쿨 (programmers.co.kr)
2. 풀이
end_date와 start_date 차이가 30일 이상이면 '장기 대여', 그렇지 않으면 '단기 대여'로 표시해서 rent_type이라는 변수로 만들어 출력하는 문제
if문을 사용해서 rent_type 변수를 만들 수 있다
https://deepdata.tistory.com/65
여기서 if문으로 decode를 설명했지만, 이건 ORACLE 기준이라고 한다
MYSQL에서는 if문이고 decode는 없음
형식은 IF(조건문, 조건문이 참인 경우 출력값, 조건문이 거짓인 경우 출력값)
그리고 MYSQL의 if문은 = 말고도 다른 비교연산 조건문이 가능하다
SELECT history_id, car_id, DATE_FORMAT(start_date,'%Y-%m-%d'), DATE_FORMAT(end_date,'%Y-%m-%d'),
if(DATEDIFF(end_date,start_date) >= 29, '장기 대여','단기 대여') as RENT_TYPE FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
WHERE start_date >= '2022-09-01' and start_date < '2022-10-01'
ORDER BY history_id desc;
또한 대여 기간을 구하기 위해 end_date와 start_date 차이를 구해야하는데, 단순히 -를 사용하면
sql이 시간으로 보지 않고 숫자로 보면서 예상과는 다른 결과를 낸다
DATEDIFF(끝,시작)으로 끝 - 시작 차이를 '일'로 계산해서 가져온다.
일 말고 년, 월, 초,.. 등등으로 가져올려면 TIMESTAMPDIFF를 사용한다.
https://extbrain.tistory.com/78
추가로 몇가지
DATE FORMAT을 바꾸기 위해 DATE_FORMAT
9월 기록만 가져오기 위해 start_date < '2022-10-01'만 사용한다면... 1,2,3,4,5,6,7,8,9월기록 모두 가져온다.
start_date >= '2022-09-01'도 추가해줘야 9월 기록만 가져올것이다
'프로그래밍 > SQL' 카테고리의 다른 글
SQL 연습 - NULL값 체크하는 방법 (0) | 2023.09.27 |
---|---|
SQL 연습 - 평균을 구하는 함수는 average가 아니고 avg- (0) | 2023.09.23 |
SQL 연습 -변수가 특정한 값을 포함하는지 체크하기- (0) | 2023.09.21 |
SQL - 시간 데이터 포맷 바꾸기, 특정 시간 이전 데이터 추출하기 (0) | 2023.09.19 |
SQL 코딩테스트 복기 -문자열 부분수정(마스킹)하는 방법(concat + substr)- (0) | 2023.05.28 |