MySQL SELECT中的格式化日期为ISO 8601

时间:2012-02-17 01:45:28

标签: mysql database date-format iso8601

我正在尝试从标准时间戳中的数据库中获取日期,并将其显示为ISO 8601.我无法轻松地在PHP中执行此操作,因此我尝试在SELECT语句中执行此操作。这就是我所拥有的,但它显示错误:

SELECT * FROM table_name ORDER BY id DESC DATE_FORMAT(date,"%Y-%m-%dT%TZ")

我做错了什么?

7 个答案:

答案 0 :(得分:66)

DATE_FORMAT(DateColumn)必须位于SELECT列表中:

SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ') AS date_formatted
FROM table_name 
ORDER BY id DESC 

答案 1 :(得分:6)

这对我有用

DATE_FORMAT( CONVERT_TZ(`timestamp`, @@session.time_zone, '+00:00')  ,'%Y-%m-%dT%TZ')

答案 2 :(得分:5)

为什么在PHP中很难做到这一点?

date("Y-m-d\TH:i:sO",strtotime($sqldata['time']));

无论如何,DATE_FORMAT需要在字段中选择,而不是添加到最后。

答案 3 :(得分:5)

DATE_FORMAT仅适用于MySQL日期列,而不适用于时间戳。

UNIX时间戳是一个整数,包含自1970年1月1日UTC以来的秒数。要将其格式化为ISO 8601日期,您需要使用FROM_UNIXTIME()函数。

FROM_UNIXTIME采用与DATE_FORMAT相同的格式字符串,因此要格式化名为' created'的列。你&#d;

SELECT created /* e.g. 1288799488 */ , 
       FROM_UNIXTIME(created,'%Y-%m-%dT%TZ') /* e.g. 2010-11-03T08:51:28Z */
FROM table_name

答案 4 :(得分:4)

从数据库加载日期字段并使用PHP将其转换为ISO格式是直截了当的;请参阅c格式字符串到PHP datehttp://www.php.net/manual/en/function.date.php

echo date('c'); // expected "2013-03-08T14:45:37+05:00"

答案 5 :(得分:3)

您应该将DATE_FORMAT移动到查询的选择部分,如下所示:

SELECT *, DATE_FORMAT(date,"%Y-%m-%dT%TZ") AS date FROM table_name ORDER BY id DESC

答案 6 :(得分:2)

DATE_FORMAT(date, '%Y-%m-%dT%TZ')应该在select子句中。

SELECT DATE_FORMAT(date, '%Y-%m-%dT%TZ') 
FROM table_name 
ORDER BY id DESC