我有以下表结构:
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
为什么会这样?
答案 0 :(得分:6)
你可能正在寻找
SELECT DATE(FROM_UNIXTIME(created)) FROM mytable WHERE 1 LIMIT 5
答案 1 :(得分:3)
这种情况正在发生,因为您从根本上误解了MySQL的日期和时间处理。为什么要将日期存储为int(10)
而不是DATE
或TIMESTAMP
?那是错的。
阅读文档。 http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date
总而言之,int
被转换为字符串,字符串被解释为日期表示。 1308122243被解释为13-08-12加上一些额外的字符,因此被转换为2013年8月12日。但是1308552690是2013年8月55日,因此无效,因此null
。
答案 2 :(得分:0)
我想你想要
SELECT FROM_UNIXTIME(created) FROM mytable
答案 3 :(得分:0)
我发现了自己的错误,解决方案很简单。
如果您希望将int(10)
字段正确解释为时间戳,则应该DATE(FROM_UNIXTIME(created))
而不是DATE(created)
。
答案 4 :(得分:0)
SELECT DATE( FROM_UNIXTIME(`created`)) FROM mytable WHERE 1 LIMIT 5