MySQL DATE返回NULL

时间:2012-06-06 09:03:26

标签: mysql date

我有以下表结构:

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

为什么会这样?

5 个答案:

答案 0 :(得分:6)

你可能正在寻找

SELECT DATE(FROM_UNIXTIME(created)) FROM mytable WHERE 1 LIMIT 5

答案 1 :(得分:3)

这种情况正在发生,因为您从根本上误解了MySQL的日期和时间处理。为什么要将日期存储为int(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日。但是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)

你尝试过FROM_UNIXTIME吗?

SELECT DATE( FROM_UNIXTIME(`created`)) FROM mytable WHERE 1 LIMIT 5