문제를 풀다가, 분명 이상없이 푼것 같은데 계속 오답이라고 하여, 직접 값을 하나하나 출력해보다가 이해가 가질않는 점을 발견하게되어 문의가 시작되었습니다.
(물론이때까지만 해도 문의 넣어 볼 생각안함.)
MySQL 으로 풀었는데, 풀다보니 분명 맞는거 같지만 계속 오답이라 하여 글을 남겨봅니다.
일단 왜 오답이 나오는지 계속 찾다보니, CAR_ID
가 1인경우 DATEDIFF(END_DATE +1 , START_DATE)
만 빈값이 나오더라고요.
DATEDIFF
함수를 사용해서, END_DATA
에 1을 날짜 평균값 계산하기 전에 1을 더해줘서 했는데 왜그러는 걸까요? (다른 것들은 다 정상으로 잘 나와서 더 의문..)
SELECT CAR_ID ,
DATEDIFF(END_DATE , START_DATE) AS one, DATEDIFF(END_DATE +1 , START_DATE) AS two
FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY;
의 경우
CAR_ID | one | two |
---|---|---|
중간 | 생략 | -- |
2 | 30 | 31 |
2 | 93 | 94 |
1 | 30 |
문의하고 다음날 바로 답변이 왔다! 내용은 아래와 같다.
먼저 날짜형식의 데이터를 숫자로 바꾸면 %y%m%d(연월일) 그대로 들어간다.
'1991-01-12'
-> 19910112
, '2023-12-31'
-> 20231231
그렇기에 날짜 20231130 -> 23년 11월 30일은 가능하지만, 20231131 -> 11월 31일은 안되는 것
숫자 1만 더하게된다면, 12월 1일이 아닌 11월 31일로 연산이 되기때문에, 존재하지 않는 날짜데이터는 에러가 나는 것이다.
실습 테스트 링크 : w3schools
이로써, 날짜 함수를 꼭 써줘야 에러가 나올 경우의 수가 훨씬 적어진다는 것을 알게되었다.
또, 모르는게 있으면 이렇게 물어보니 금방 해결되고, 배울수있다는 점도 느꼈고,
반대로, 나도 누군가 물어본다면, 원리까지 알고 있어 답변할 수 있어야겠다는 생각이 들었다.
DATE_ADD(date, INTERVAL value unit)