web-dev-qa-db-fra.com

Formater la date dans MySQL SELECT en ISO 8601

J'essaie de récupérer la date de ma base de données dans un horodatage standard et de l'afficher en ISO 8601. Je ne peux pas le faire facilement en PHP donc j'essaie de le faire en mon instruction SELECT. Voici ce que j'ai, mais elle affiche une erreur:

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

Qu'est-ce que je fais mal?

44
Adam

La DATE_FORMAT(DateColumn) doit être dans la liste SELECT:

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

Cela a fonctionné pour moi

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

DATE_FORMAT ne fonctionne que sur les colonnes de date MySQL, pas sur les horodatages.

Un horodatage UNIX est un entier contenant le nombre de secondes depuis le 1er janvier 1970 UTC. Pour formater cela comme une date ISO 8601, vous devez utiliser la fonction FROM_UNIXTIME () à la place.

FROM_UNIXTIME prend les mêmes chaînes de format que DATE_FORMAT, donc pour formater une colonne nommée "créée", vous devez:

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

Pourquoi est-il difficile de le faire en PHP?

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

Quoi qu'il en soit, que DATE_FORMAT doit être dans les champs à sélectionner, pas cloué à la fin.

5
Niet the Dark Absol

Vous devez déplacer le DATE_FORMAT vers la partie sélectionnée de votre requête comme ceci:

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

Charger le champ de date à partir de la base de données et le convertir au format ISO avec PHP est simple; voir la chaîne de format c à PHP date: http://www.php.net/manual/en/function.date.php

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

DATE_FORMAT(date, '%Y-%m-%dT%TZ') doit être dans la clause select.

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