字符串或数字中应该包含多少位数字,以便MySQL可以将其指定为日期值?

在将年份视为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)

上面的查询返回NULL,因为一位数字小于8。

相反,当将年份视为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)

上面的查询返回NULL,因为位数小于6。

猜你喜欢