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

MySQL에서 잘못된 날짜에 INTERVAL 키워드를 사용하면 어떻게 될까?

MySQL에서 실제로 존재하지 않는 날짜(예: 2월 30일)에 INTERVAL 키워드를 사용해 날짜 연산을 수행하면 어떤 일이 일어날까요? 그 답은 allow_invalid_dates 모드의 활성화 여부에 따라 달라집니다.

모드가 비활성화된 경우: NULL 반환

이 모드가 꺼져 있는 기본 상태에서는 MySQL이 잘못된 날짜를 허용하지 않습니다. 따라서 날짜 연산이 수행되지 않고 결과로 NULL이 출력됩니다.

mysql> select '2017-02-30' + INTERVAL 7 day;
+-------------------------------+
| '2017-02-30' + INTERVAL 7 day |
+-------------------------------+
| NULL                          |
+-------------------------------+
1 row in set, 1 warning (0.00 sec)

allow_invalid_dates 모드가 활성화된 경우

반면 allow_invalid_dates 모드를 활성화하면 MySQL은 유효하지 않은 날짜도 그대로 받아들여, 마치 정상적인 날짜인 것처럼 날짜 연산을 정상적으로 수행합니다.

mysql> set sql_mode = allow_invalid_dates;
Query OK, 0 rows affected (0.05 sec)

mysql> select '2017-02-30' + INTERVAL 7 day;
+-------------------------------+
| '2017-02-30' + INTERVAL 7 day |
+-------------------------------+
| 2017-03-09                    |
+-------------------------------+
1 row in set (0.00 sec)

mysql> select '2017-11-31' + INTERVAL 7 day;
+-------------------------------+
| '2017-11-31' + INTERVAL 7 day |
+-------------------------------+
| 2017-12-08                    |
+-------------------------------+
1 row in set (0.00 sec)

위 실행 결과를 보면 '2017-02-30'에 7일을 더한 값은 '2017-03-09'로 계산되고, '2017-11-31'에 7일을 더한 값은 '2017-12-08'로 계산됩니다. 즉, 존재하지 않는 날짜라도 해당 월의 마지막 날을 기준으로 자연스럽게 다음 달로 넘어가 연산됩니다.

정리하면, 잘못된 날짜에 대한 INTERVAL 연산 결과는 sql_mode에서 allow_invalid_dates 옵션의 설정 상태에 전적으로 의존한다는 점을 기억해 두시면 됩니다.