3

次のテーブル構造があります。

uid     | ... | created | ...
int(10) | ... | int(10) | ...

createdフィールドにはタイムスタンプが入力されています。クエリの結果は次のSELECT created FROM mytable WHERE 1 LIMIT 5とおりです。

created
----------
1308122243
1308122243
1308552690
1309247417
1309254571

しかし、 を実行するSELECT DATE(created) FROM mytable WHERE 1 LIMIT 5と、奇妙な NULL が発生します。

DATE(created)
-------------
2013-08-12
2013-08-12
NULL
NULL
NULL

なぜそれが起こるのですか?

4

5 に答える 5

12

あなたはおそらく探している

SELECT DATE(FROM_UNIXTIME(created)) FROM mytable WHERE 1 LIMIT 5
于 2012-06-06T09:09:33.850 に答える
2

これは、MySQL の日付と時刻の処理を根本的に誤解しているために発生しています。日付をorint(10)ではなくとして保存するのはなぜですか? それは間違っています。DATETIMESTAMP

ドキュメントを読んでください。http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date

要約すると、intは文字列に変換され、文字列は日付表現として解釈されます。1308122243 は 13-08-12 にいくつかの余分な文字を加えたものとして解釈されるため、2013 年 8 月 12 日に変換されますnull

于 2012-06-06T09:20:30.910 に答える
0

私はあなたが欲しいと思います

SELECT FROM_UNIXTIME(created) FROM mytable
于 2012-06-06T09:09:54.253 に答える
0

私は自分の間違いを見つけましたが、解決策は簡単でした。

int(10)フィールドをタイムスタンプとして正しく解釈したい場合はDATE(FROM_UNIXTIME(created))DATE(created).

于 2012-06-06T09:10:08.957 に答える
0

FROM_UNIXTIME を試しましたか?

SELECT DATE( FROM_UNIXTIME(`created`)) FROM mytable WHERE 1 LIMIT 5
于 2012-06-06T09:11:08.480 に答える