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

MySQL에서 구분 기호 없는 숫자와 문자열을 날짜로 해석하는 방법

MySQL의 날짜 해석 규칙

MySQL은 구분 기호(하이픈, 콜론 등)가 전혀 포함되지 않은 문자열이나 숫자라도 YYYYMMDDHHMMSS 또는 YYMMDDHHMMSS 형식으로 작성되어 유효한 날짜로 성립한다면, 이를 정상적인 날짜 값으로 인식합니다.

즉, 연도·월·일·시·분·초 각 자릿수가 실제 존재할 수 있는 범위 안에 있다면 별도의 구분 기호 없이도 날짜로 변환할 수 있습니다. 아래에서 유효한 경우와 무효한 경우의 예시를 살펴보겠습니다.

유효한 날짜로 해석되는 경우

mysql> Select Timestamp(20171022040536);
+---------------------------+
| Timestamp(20171022040536) |
+---------------------------+
| 2017-10-22 04:05:36       |
+---------------------------+
1 row in set (0.00 sec)

mysql> Select Timestamp('20171022040536');
+-----------------------------+
| Timestamp('20171022040536') |
+-----------------------------+
| 2017-10-22 04:05:36         |
+-----------------------------+
1 row in set (0.00 sec)

mysql> Select Timestamp('171022040536');
+---------------------------+
| Timestamp('171022040536') |
+---------------------------+
| 2017-10-22 04:05:36       |
+---------------------------+
1 row in set (0.00 sec)

위 세 가지 쿼리는 모두 같은 결과를 반환합니다. 첫 번째는 숫자형 값, 두 번째는 14자리 문자열, 세 번째는 12자리(YYMMDDHHMMSS) 문자열을 사용했지만, MySQL은 모두 '2017년 10월 22일 04시 05분 36초'로 정확하게 해석했습니다.

NULL을 반환하는 무효한 경우

반면 각 자릿수의 값이 실제 범위를 벗어나면 MySQL은 해당 값을 날짜로 인식하지 못하고 NULL을 반환합니다.

mysql> Select Timestamp('20171022048536');
+-----------------------------+
| Timestamp('20171022048536') |
+-----------------------------+
| NULL                        |
+-----------------------------+
1 row in set, 1 warning (0.00 sec)

위 쿼리에서 분(minute) 자릿수가 85로 잘못 입력되었습니다. 분은 00~59 사이의 값만 가능하므로 MySQL은 NULL을 반환하고 경고 메시지를 함께 출력합니다.

mysql> Select Timestamp('20171322040536');
+-----------------------------+
| Timestamp('20171322040536') |
+-----------------------------+
| NULL                        |
+-----------------------------+
1 row in set, 1 warning (0.00 sec)

이번에는 월(month) 자릿수가 13으로 잘못 입력된 경우입니다. 월은 01~12 사이의 값만 유효하기 때문에 역시 NULL이 반환됩니다.

정리

MySQL은 구분 기호의 유무보다 각 자릿수의 값이 실제 날짜 범위 내에 있는지 여부를 기준으로 판단합니다. 따라서 YYYYMMDDHHMMSS 또는 YYMMDDHHMMSS 형식이라면 구분 기호 없이도 날짜로 변환되지만, 월·분 등의 값이 유효 범위를 벗어나면 NULL과 경고를 반환하므로 데이터 입력 시 주의가 필요합니다.