MySQLのtimestamp
を日付に変換したいです。
User.registrationフィールドをyyyy-mm-dd
としてテキストファイルにフォーマットします。
これが私のSQLです:
$sql = requestSQL("SELECT user.email,
info.name,
FROM_UNIXTIME(user.registration),
info.news
FROM user, info
WHERE user.id = info.id ", "export members");
私はまた、日付変換を試してみました:
DATE_FORMAT(user.registration, '%d/%m/%Y')
DATE(user.registration)
テキストファイルを書く前に結果をエコーしてみると:
email1; name1; DATE_FORMAT(user.registration、 '%d /%m /%Y'); news1
email2; name2; news2
そのフィールドをどのようにして日付に変換できますか?
DATE_FORMAT(FROM_UNIXTIME(`user.registration`), '%e %b %Y') AS 'date_formatted'
整数のタイムスタンプを使ってテーブルを作成します。
mysql> create table foo(id INT, mytimestamp INT(11));
Query OK, 0 rows affected (0.02 sec)
いくつかの値を挿入してください
mysql> insert into foo values(1, 1381262848);
Query OK, 1 row affected (0.01 sec)
見てください
mysql> select * from foo;
+------+-------------+
| id | mytimestamp |
+------+-------------+
| 1 | 1381262848 |
+------+-------------+
1 row in set (0.00 sec)
数値をタイムスタンプに変換します。
mysql> select id, from_unixtime(mytimestamp) from foo;
+------+----------------------------+
| id | from_unixtime(mytimestamp) |
+------+----------------------------+
| 1 | 2013-10-08 16:07:28 |
+------+----------------------------+
1 row in set (0.00 sec)
読みやすい形式に変換します。
mysql> select id, from_unixtime(mytimestamp, '%Y %D %M %H:%i:%s') from foo;
+------+-------------------------------------------------+
| id | from_unixtime(mytimestamp, '%Y %D %M %H:%i:%s') |
+------+-------------------------------------------------+
| 1 | 2013 8th October 04:07:28 |
+------+-------------------------------------------------+
1 row in set (0.00 sec)
日付を取得するには、 cast
を使用します。
cast(user.registration as date)
そして特定のフォーマットを得るには date_format
date_format(registration, '%Y-%m-%d')
registration
フィールドが実際にTIMESTAMP
型である場合は、以下のようにします。
$sql = "SELECT user.email,
info.name,
DATE(user.registration),
info.news
FROM user,
info
WHERE user.id = info.id ";
登録はyyyy-mm-ddと表示されているはずです。
MysqlのDATE関数を使用するだけです:
mysql> select DATE(mytimestamp) from foo;
timestamp
をdate
に変換する必要があります。
select FROM_UNIXTIME(user.registration, '%Y-%m-%d %H:%i:%s') AS 'date_formatted'
あなたがあなたの出力でクエリを得ているならば、実際に結果をエコーするコードを私たちに見せる必要があります。 requeteSQLを呼び出すコードを投稿できますか?
たとえば、phpで一重引用符を使用した場合は、値ではなく変数名が表示されます。
echo 'foo is $foo'; // foo is $foo
これはあなたの問題とまったく同じように聞こえますが、これが原因であると私は確信しています。
また、@記号を削除してさらに情報が得られるかどうかを確認してください。
そのため
$SQL_result = @mysql_query($SQL_requete); // run the query
になる
$SQL_result = mysql_query($SQL_requete); // run the query
クエリがエラーをスローしている場合、これはエラー抑制を停止します。
試してください:
SELECT strftime("%Y-%d-%m", col_name, 'unixepoch') AS col_name
タイムスタンプをミリ秒単位でyyyy-mm-dd文字列にフォーマットします。
ここで で説明されているように、 'date'関数でそれを行いました :
(SELECT count(*) as the-counts,(date(timestamp)) as the-timestamps FROM `user_data` WHERE 1 group BY the-timestamps)
FROM_UNIXTIME(unix_timestamp, [format])
で十分です
FROM_UNIXTIME(user.registration, '%Y-%m-%d') AS 'date_formatted'
FROM_UNIXTIME
は数値を取得し、それをDATE
オブジェクトに変換します。
またはフォーマット文字列が与えられた場合、それを文字列として返します。
古いソリューションは、最初の日付オブジェクトを取得し、2番目の関数DATE_FORMAT
...でフォーマットすることでしたが、これはもう必要ありません