我需要将数据从MySQL转换为非常具体的日期时间格式,以便它可以定期自动集成到客户端的数据库中。
我想知道是否有办法将YYYY-MM-DD格式的常用MySQL时间戳hh:mm:ss(例如2012-01-10 10:58:07)转换为非常具体的字符串描述日期/时间格式,如dd-Mos-yy hh:mm:ss.sss(例如07-Sep-10 12:00:00.000)。新的日期/时间格式必须精确,直到毫秒值。
我知道有一些聪明的方法来操纵传入的数据,将字符串放入MySQL可以接受的日期时间格式,但我似乎找不到相同的导出数据的工具。我想使用SQL来处理大部分内容,但是如果这是一个更好的工具,那么它对PHP有一定的了解。
答案 0 :(得分:5)
在创建MySQL查询时只需使用DATE_FORMAT()
:
SELECT DATE_FORMAT(date, '%d-%b-%y %H:%m:%s.%f') as date_formatted FROM your_table;
这也使用%f
选项处理微秒,但提供6位数字&你的问题规格不是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;
然后在PHP中使用date_unixtimestamp
并格式化。
答案 1 :(得分:1)
如果你还没有它,你会从哪里获得毫秒信息?您需要将毫秒设置为'000' - 硬编码。现在很简单:
echo date('dd-Mos-yy hh:mm:ss', strtotime($mysql_time)) . '000';
我还要确保,其他数据库服务器使用的是与您相同的时区。否则你可能需要转换之前的时间。