SQL 연습 - 시간 차이는 무조건 DATEDIFF, MYSQL의 if문-

1. 문제

 

코딩테스트 연습 - 자동차 대여 기록에서 장기/단기 대여 구분하기 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

2. 풀이

 

end_date와 start_date 차이가 30일 이상이면 '장기 대여', 그렇지 않으면 '단기 대여'로 표시해서 rent_type이라는 변수로 만들어 출력하는 문제

 

if문을 사용해서 rent_type 변수를 만들 수 있다

 

https://deepdata.tistory.com/65

 

코딩테스트를 위한 SQL 간단 벼락치기

1. 세미콜론 모든 수행 문장이 끝날 때 최종적으로 마지막에 세미콜론 ; 으로 끝냄 2. 특정 칼럼 조회 2-1) 기본형식 select (칼럼) from (테이블명); 2-2) 모든 칼럼 조회 select * from (테이블명); 3. 조건

deepdata.tistory.com

 

여기서 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이 시간으로 보지 않고 숫자로 보면서 예상과는 다른 결과를 낸다

 

https://stackoverflow.com/questions/55699829/whats-the-difference-between-datediff-and-doing-subtraction-by-myself

 

what's the difference between DATEDIFF and doing subtraction by myself

the leetcode question 197.Rising Temperature Given a Weather table, write a SQL query to find all dates' Ids with higher temperature compared to its previous (yesterday's) dates. +---------+-----...

stackoverflow.com

 

DATEDIFF(끝,시작)으로 끝 - 시작 차이를 '일'로 계산해서 가져온다.

 

일 말고 년, 월, 초,.. 등등으로 가져올려면 TIMESTAMPDIFF를 사용한다.

 

https://extbrain.tistory.com/78

 

[MySQL] 날짜 차이 가져오기 (DATEDIFF, TIMESTAMPDIFF 함수)

▶MySQL 날짜 차이 가져오기 (DATEDIFF, TIMESTAMPDIFF 함수) ▶설명 MySQL에서 두 날짜간의 차이를 가져올 때 사용하는 함수가 두 가지가 있습니다. 단순히 일 차이를 가져올 때 사용하는 것이 DATEDIFF 함수

extbrain.tistory.com

 

 

추가로 몇가지

 

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월 기록만 가져올것이다

TAGS.

Comments