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

MySQL에서 문자열로 표현된 날짜에 산술 연산자(덧셈, 뺄셈, 곱셈, 나눗셈)를 사용하면 어떻게 될까?

날짜 값을 문자열 형태로 표현한 상태에서 덧셈(+), 뺄셈(-), 곱셈(*), 나눗셈(/) 같은 산술 연산자를 적용하면 결과를 예측하기 매우 어렵습니다.

그 이유는 MySQL이 문자열로 된 날짜에 숫자 연산을 수행할 때, 전체 날짜를 계산하는 것이 아니라 문자열 앞부분에 나타나는 숫자만 추출하여 사용하기 때문입니다. 예를 들어 '2017-10-17'이라는 문자열은 숫자로 변환될 때 '2017'만 인식되며, 뒤의 '-10-17' 부분은 무시됩니다.

예제로 확인하기

다음 예제들을 통해 실제 동작 방식을 살펴보겠습니다.

1. 덧셈(+) 연산

mysql> select '2017-10-17' + 20;
+-------------------+
| '2017-10-17' + 20 |
+-------------------+
|              2037 |
+-------------------+
1 row in set, 1 warning (0.00 sec)

'2017-10-17'에서 숫자 부분인 2017만 추출된 후 20이 더해져 결과가 2037이 되었습니다. 날짜에 20일을 더한 값이 아니라는 점에 주의해야 합니다.

2. 뺄셈(-) 연산

mysql> select '2017-10-25' - 17;
+-------------------+
| '2017-10-25' - 17 |
+-------------------+
|              2000 |
+-------------------+
1 row in set, 1 warning (0.00 sec)

마찬가지로 2017 - 17 = 2000이라는 결과가 반환됩니다.

3. 곱셈(*) 연산

mysql> select '2017-10-17' * 2;
+-------------------+
| '2017-10-17' * 20 |
+-------------------+
|              4034 |
+-------------------+
1 row in set, 1 warning (0.00 sec)

2017 * 2 = 4034로 계산됩니다.

4. 나눗셈(/) 연산

mysql> select '2017-05-25'/5;
+----------------+
| '2017-05-25'/5 |
+----------------+
|         403.4  |
+----------------+
1 row in set, 1 warning (0.00 sec)

2017 / 5 = 403.4라는 결과가 출력됩니다.

결론: 올바른 날짜 연산 방법

위 예제에서 볼 수 있듯이, 문자열 형태의 날짜에 산술 연산자를 직접 사용하면 의도와 전혀 다른 엉뚱한 결과가 나옵니다. 또한 각 쿼리 실행 시 warning이 발생한다는 점도 주목할 필요가 있습니다.

날짜에 일수를 더하거나 빼는 등의 연산을 수행하려면 반드시 DATE_ADD(), DATE_SUB() 함수나 INTERVAL 구문을 사용해야 합니다. 예를 들어 다음과 같이 작성하는 것이 올바른 방법입니다.

mysql> SELECT DATE_ADD('2017-10-17', INTERVAL 20 DAY);
+-----------------------------------------+
| DATE_ADD('2017-10-17', INTERVAL 20 DAY) |
+-----------------------------------------+
| 2017-11-06                              |
+-----------------------------------------+

이처럼 MySQL에서 날짜 연산을 할 때는 항상 전용 날짜 함수를 사용하는 것이 안전하고 정확합니다.