
MySQL에서 날짜 차이 계산하는 방법Computer Science/데이터베이스2024. 11. 30. 22:12
Table of Contents
1. 처음 시도: 뺄셈 연산으로 날짜 차이 계산
두 날짜 간의 차이를 계산하려고 아래와 같이 SQL문을 실행하였다.
SELECT DATE("2024-11-07") - DATE("2024-11-03");
결과는 4로 나왔고, 기대값과 일치했다.
하지만 뺄셈 연산은 올바른 결과를 보장하지 않는다.
2. 뺄셈 연산으로 기간을 구하는 문제점
다음 SQL문을 실행했을 때는 문제가 발생했다.
SELECT DATE("2024-11-07") - DATE("2023-11-07");
기대값은 366일 (윤년 포함)이지만, 결과는 10000이 나왔다.
이유는 MySQL이 DATE
타입의 값을 YYYYMMDD 형식의 숫자로 변환한 뒤 계산하기 때문이다.
즉, 20241107-20231107이로 변환되어 10000이 나오는 것이다.
3. 날짜 차이를 정확히 계산하는 방법: DATEDIFF 함수
두 날짜 간의 정확한 일 수를 계산하려면 DATEDIFF
함수를 사용해야한다.
DATEDIFF는 첫 번째 날짜에서 두 번째 날짜를 빼서 일 수 차이를 반환한다.
SELECT DATEDIFF(DATE("2024-11-07"), DATE("2023-11-07"));
위 SQL문의 결과는 366으로, 기대한 값과 정확히 일치한다.
4. 또 다른 잘못된 시도: 문자열 뺄셈
문자열에서 하이픈으로 구분된 날짜를 직접 빼려고 하면 의도치 않은 결과가 나올 수 있다.
4.1 문자열에서 하이픈 포함
SELECT "2024-11-07"-"2024-11-01";
결과: 0
이유: MySQL은 문자열을 숫자로 변환하려고 시도하지만, 하이픈 때문에 변환에 실패하고 기본값 0으로 간주한다.
따라서 계산식은 0 - 0 = 0이 된다.
4.2 순수 숫자 문자열
SELECT "2024"-"2021";
결과: 3
이 경우, MySQL은 문자열을 숫자로 변환할 수 있었고, 정상적으로 계산이 이루어졌다.
5. 정리: 날짜 차이는 반드시 DATEDIFF를 사용하자!
SELECT DATEDIFF(END_DATE, START_DATE);
'Computer Science > 데이터베이스' 카테고리의 다른 글
MySQL ONLY_FULL_GROUP_BY 이해하기 (1) | 2024.12.11 |
---|---|
COUNT 함수와 SUM 함수의 차이점 (0) | 2024.12.01 |
SQL IN절에서 NULL이 예상대로 동작하지 않는 이유 (1) | 2024.11.29 |
MySQL에서 SELECT 별칭은 GROUP BY, ORDER BY, HAVING 절에서 사용 가능하다 (0) | 2024.11.28 |
MySQL은 문자열 대소문자 구분을 하지 않는다. (0) | 2024.11.25 |
@nuheajiohc :: nuheajiohc
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!