Loading...

字符串或数字中应该包含多少位数字,以便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。