MySQL将“1965-05-15”等日期转换为 TIMESTAMP 时得到输出 0「零」?

介绍

MySQL是一种流行的关系型数据库管理系统,它使用SQL语言进行操作和管理。在MySQL中,日期和时间通常保存为不同的数据类型,但有时需要将日期转换为TIMESTAMP格式。在本文中,我们将探讨如何将日期转换为TIMESTAMP格式,并解决其中出现的问题。

原因

如果我们想将日期转换为TIMESTAMP格式,在MySQL中,我们可以使用以下语句:

SELECT UNIX_TIMESTAMP('1965-05-15');

这将返回一个TIMESTAMP值,它代表给定日期的毫秒数。但实际上,当我们运行上述代码时,MySQL将返回一个值为0的结果,而不是预期的毫秒数。

问题分析

为什么MySQL会返回零呢?这是因为UNIX_TIMESTAMP()函数期望的输入格式是“YYYY-MM-DD HH:MM:SS”,即具有时间部分的日期。由于在我们的查询中仅提供了日期部分,“HH:MM:SS”默认为“00:00:00”,这导致UNIX_TIMESTAMP()函数将日期视为1970年1月1日凌晨零点,在此时返回的毫秒数为0。

解决方法一:添加默认时间

为了解决这个问题,我们需要告诉MySQL,如果没有提供时间部分,使用什么时间作为默认值。一种方法是使用DATE_FORMAT()函数将日期格式化为具有时间部分的字符串,并将其传递给UNIX_TIMESTAMP()函数:

SELECT UNIX_TIMESTAMP(DATE_FORMAT('1965-05-15','%Y-%m-%d %H:%i:%s'));

这将返回时间戳,代表1965年5月15日午夜零点零分零秒。

解决方法二:使用CAST()

另一种方法是使用CAST()函数将日期转换为DATETIME格式,然后传递给UNIX_TIMESTAMP()函数:

SELECT UNIX_TIMESTAMP(CAST('1965-05-15' AS DATETIME));

这将返回时间戳,代表1965年5月15日午夜零点零分零秒。

解决方法三:使用STR_TO_DATE()

MySQL还提供了另一个函数STR_TO_DATE(),它可以将字符串转换为日期/时间格式。使用STR_TO_DATE()函数,我们可以按以下方式处理日期:

SELECT UNIX_TIMESTAMP(STR_TO_DATE('1965-05-15','%Y-%m-%d'));

这将返回时间戳,表示1965年5月15日午夜零点零分零秒。

总结

在MySQL中将日期转换为TIMESTAMP格式可能会遇到一些问题。如果我们只提供日期并调用UNIX_TIMESTAMP()函数,则MySQL默认将时间部分视为零,从而导致返回值为零。为了解决此问题,我们可以使用DATE_FORMAT(), CAST()或STR_TO_DATE()函数来添加一个默认时间或将日期转换为DATETIME格式。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

数据库标签