MySQL 테이블에 저장된 날짜(DATE) 값에 더하기(+), 빼기(−), 곱하기(*), 나누기(/)와 같은 산술 연산자를 적용하면, MySQL은 해당 날짜 값을 날짜로 인식하지 않고 단순한 숫자로 취급하여 산술 연산을 수행합니다. 즉, '2017-05-25'라는 날짜는 내부적으로 20170525라는 정수로 변환된 뒤 계산됩니다.
예제 테이블 준비
'example'이라는 테이블의 'orderdate' 컬럼에 날짜 값이 하나 저장되어 있다고 가정해 보겠습니다.
mysql> select * from example; +------------+ | orderdate | +------------+ | 2017-05-25 | +------------+ 1 row in set (0.00 sec)
각 산술 연산의 실행 결과
이제 orderdate 컬럼에 네 가지 산술 연산자를 차례대로 적용해 보겠습니다.
mysql> select orderdate+10 from example; +--------------+ | orderdate+10 | +--------------+ | 20170535 | +--------------+ 1 row in set (0.00 sec) mysql> select orderdate*10 from example; +--------------+ | orderdate*10 | +--------------+ | 201705250 | +--------------+ 1 row in set (0.00 sec) mysql> select orderdate-10 from example; +--------------+ | orderdate-10 | +--------------+ | 20170515 | +--------------+ 1 row in set (0.00 sec) mysql> select orderdate/10 from example; +--------------+ | orderdate/10 | +--------------+ | 2017052.5 | +--------------+ 1 row in set (0.00 sec)
결과 분석
- orderdate + 10 → 20170535: 20170525에 10을 더했을 뿐입니다. 실제로 존재하지 않는 잘못된 날짜 형태의 숫자가 반환됩니다.
- orderdate − 10 → 20170515: 마찬가지로 단순한 뺄셈 결과일 뿐, 의미 있는 날짜 계산이 아닙니다.
- orderdate * 10 → 201705250, orderdate / 10 → 2017052.5: 곱셈과 나눗셈 역시 숫자 연산으로 처리되며, 날짜 개념은 완전히 무시됩니다.
날짜 연산 시 주의할 점과 올바른 대안
위 예제에서 알 수 있듯이, 일반 산술 연산자를 날짜 값에 사용하면 원하는 결과를 얻기 어렵습니다. 실제 날짜를 기준으로 일수를 더하거나 빼려면 반드시 DATE_ADD(), DATE_SUB() 함수 또는 INTERVAL 구문을 사용해야 합니다.
mysql> select orderdate + INTERVAL 10 DAY from example; +-----------------------------+ | orderdate + INTERVAL 10 DAY | +-----------------------------+ | 2017-06-04 | +-----------------------------+ 1 row in set (0.00 sec) mysql> select DATE_SUB(orderdate, INTERVAL 10 DAY) from example; +--------------------------------------+ | DATE_SUB(orderdate, INTERVAL 10 DAY) | +--------------------------------------+ | 2017-05-15 | +--------------------------------------+ 1 row in set (0.00 sec)
이처럼 INTERVAL을 활용하면 월말·윤년 등 달력 규칙까지 자동으로 반영된 정확한 날짜 계산이 가능합니다. 따라서 MySQL에서 날짜를 다룰 때는 산술 연산자 대신 전용 날짜 함수를 사용하는 것이 안전하고 권장되는 방법입니다.