将MySQL日期时间转换为非常特定的格式进行导出


Converting MySQL datetime to very specific format for export

我需要将MySQL中的数据转换为非常特定的日期时间格式,以便能够定期自动集成到客户端的数据库中。

我想知道是否有一种方法可以将格式为YYYY-MM-DD hh:MM:ss(例如2012-01-10 10:58:07)的常用MySQL时间戳转换为一个非常具体的字符串,该字符串描述日期/时间格式,如DD Mos yy hh:MM:ss.ss(例如,2010年9月7日12:00:00.000)。新的日期/时间形式必须是精确的,直到毫秒值。

我知道有一些巧妙的方法可以处理传入数据,将字符串放入MySQL可以接受的日期时间格式,但我似乎找不到相同的导出数据的工具。我想使用SQL来处理大部分问题,但如果PHP是一个更好的工具,我对它有一些了解。

创建MySQL查询时只需使用DATE_FORMAT()

SELECT DATE_FORMAT(date, '%d-%b-%y %H:%m:%s.%f') as date_formatted FROM your_table;

这也使用CCD_ 2选项来处理微秒;而不是你的问题所说的3位数。如果你真的知道日期需要3位数字来表示毫秒,你可以使用SUBSTRING()来返回你需要的字符串日期数据。这应该工作

SELECT SUBSTRING(DATE_FORMAT(date, '%d-%b-%y %H:%m:%s.%f'),1,22) as date_formatted FROM your_table;

但是,您也可以通过在时间之后显式设置3个0来伪造3个数字,如下所示:

SELECT DATE_FORMAT(date, '%d-%b-%y %H:%m:%s.000') as date_formatted FROM your_table;

注意%f现在是.000。但也就是说,这不是毫秒精度,因为.000被简单地附加为文本&而不是基于真实数据。至少%f正在处理真实的日期数据。

因此,如果基于上面的示例,DATE_FORMAT不能100%满足您的需求,那么使用PHP日期格式可能是最好的处理方式。如果是这样的话,日期/时间数据会被存储为Unix时间戳吗?还是仅仅作为时间戳?

如果它只是一个时间戳,则使用UNIX_TIMESTAMP()将其转换为:

SELECT UNIX_TIMESTAMP(date) as date_unixtimestamp FROM your_table;

然后使用date_unixtimestamp并按照您在PHP中的意愿进行格式化。

如果您还没有毫秒信息,您将从哪里获得毫秒信息?您需要将毫秒设置为"000"-硬编码。现在很简单:

echo date('dd-Mos-yy hh:mm:ss', strtotime($mysql_time)) . '000';

我还要确保,其他数据库服务器使用的时区与您相同。否则,您可能需要转换之前的时间。