Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL 테이블의 날짜 값에 더하기, 빼기, 곱하기, 나누기 연산자를 사용하면 어떻게 될까?

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에서 날짜를 다룰 때는 산술 연산자 대신 전용 날짜 함수를 사용하는 것이 안전하고 권장되는 방법입니다.