web-dev-qa-db-ja.com

MySQL SELECTで日付をISO 8601としてフォーマットする

標準のタイムスタンプでデータベースから日付を取得し、ISO 8601として表示しようとしています。PHPで簡単に実行できないため、 SELECTステートメント。これは私が持っているものですが、エラーが表示されます。

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

私は何を間違えていますか?

44
Adam

DATE_FORMAT(DateColumn)SELECTリストに含まれている必要があります。

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

これは私のために働いた

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

DATE_FORMATは、タイムスタンプではなく、MySQL日付列でのみ機能します。

UNIXタイムスタンプは、1970年1月1日UTCからの秒数を含む整数です。これをISO 8601日付としてフォーマットするには、代わりにFROM_UNIXTIME()関数を使用する必要があります。

FROM_UNIXTIMEはDATE_FORMATと同じフォーマット文字列を使用するため、「created」という名前の列をフォーマットするには次のようにします。

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

PHPで実行するのが難しいのはなぜですか?

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

とにかく、そのDATE_FORMAT選択するフィールドに存在する必要があり、最後に追加する必要はありません。

5

次のように、DATE_FORMATをクエリの選択部分に移動する必要があります。

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

データベースから日付フィールドをロードし、PHPを使用してISO形式に変換するのは簡単です。c形式文字列をPHP datehttp://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')select句に含める必要があります。

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