MySQL에서 문자열이나 숫자를 날짜 값으로 지정할 때 필요한 최소 자릿수는 연도를 어떻게 표현하느냐에 따라 달라집니다. 이 글에서는 연도를 4자리로 표현하는 경우와 2자리로 표현하는 경우 각각의 자릿수 요건과 예제를 살펴봅니다.
연도를 4자리로 표현하는 경우
연도를 4자리 값으로 다룰 때는 MySQL이 이를 날짜 값으로 인식하기 위해 문자열이나 숫자에 최소 8자리가 필요합니다. 여기에 마이크로초까지 저장하고 싶다면 최대 20자리까지 사용할 수 있습니다.
mysql> Select TIMESTAMP('20171022040536.100000');
+-----------------------------------+
| TIMESTAMP('20171022040536100000') |
+-----------------------------------+
| 2017-10-22 04:05:36.100000 |
+-----------------------------------+
1 row in set, 1 warning (0.00 sec)위 쿼리는 TIMESTAMP 값으로 20자리 문자열을 사용했습니다. 마지막 6자리는 마이크로초를 나타냅니다.
mysql> Select TIMESTAMP(20171022);
+---------------------+
| TIMESTAMP(20171022) |
+---------------------+
| 2017-10-22 00:00:00 |
+---------------------+
1 row in set (0.00 sec)
위 쿼리는 TIMESTAMP 값으로 8자리 숫자를 사용했습니다.
mysql> Select TIMESTAMP(201710);
+-------------------+
| TIMESTAMP(201710) |
+-------------------+
| NULL |
+-------------------+
1 row in set, 1 warning (0.00 sec)
위 쿼리는 자릿수가 8자리 미만이기 때문에 NULL을 반환합니다.
연도를 2자리로 표현하는 경우
반대로 연도를 2자리 값으로 다룰 때는 MySQL이 이를 날짜 값으로 인식하기 위해 문자열이나 숫자에 최소 6자리가 필요합니다. 마이크로초까지 저장하려면 최대 18자리까지 사용할 수 있습니다.
mysql> Select TIMESTAMP(171022);
+---------------------+
| TIMESTAMP(171022) |
+---------------------+
| 2017-10-22 00:00:00 |
+---------------------+
1 row in set (0.00 sec)
위 쿼리는 TIMESTAMP 값으로 6자리 숫자를 사용했습니다.
mysql> Select TIMESTAMP('171022040536.200000');
+----------------------------------+
| TIMESTAMP('171022040536.200000') |
+----------------------------------+
| 2017-10-22 04:05:36.200000 |
+----------------------------------+
1 row in set (0.00 sec)위 쿼리는 TIMESTAMP 값으로 18자리 문자열을 사용했습니다. 점(.) 뒤의 마지막 6자리는 마이크로초를 나타냅니다.
mysql> Select TIMESTAMP(1710);
+-----------------+
| TIMESTAMP(1710) |
+-----------------+
| NULL |
+-----------------+
1 row in set, 1 warning (0.00 sec)
위 쿼리는 자릿수가 6자리 미만이기 때문에 NULL을 반환합니다.
정리
MySQL에서 날짜 값으로 인식되기 위한 최소 자릿수는 연도 표현 방식에 따라 다릅니다. 연도를 4자리로 쓰면 최소 8자리(마이크로초 포함 시 최대 20자리), 연도를 2자리로 쓰면 최소 6자리(마이크로초 포함 시 최대 18자리)가 필요하며, 이보다 자릿수가 부족하면 NULL이 반환됩니다.