将VARCHAR转换为DATETIME时为NULL

时间:2014-01-23 12:32:47

标签: mysql sql

当我使用下面的语句时,我只是将NULL返回到应该返回值的位置,以及列值为空的未定义字段。

SELECT STR_TO_DATE(strdate, '%Y-%m-%d %H:%m:%s') from table

enter image description here

我的日期格式设置为2013-12-11 00:58:00

如果我选择all而不转换它(只是按原样显示VARCHAR),那么我得到了:

enter image description here

3 个答案:

答案 0 :(得分:1)

分钟的正确代码为%i而非%m

SELECT STR_TO_DATE(strdate, '%Y-%m-%d %H:%i:%s')
from (select '2013-12-11 00:58:00' as strdate) t

答案 1 :(得分:1)

罪魁祸首是'%Y-%m-%d %H:%m:%s' - %m无法忍受一个月分钟。 IIRC %m对他们来说是正确的月份,%i就是你想要的那一分钟。

答案 2 :(得分:0)

来自the manual

  

如果从str中提取的日期,时间或日期时间值是非法的,STR_TO_DATE()将返回NULL并产生警告。

这意味着strdate的值与'%Y-%m-%d %H:%m:%s'的格式模式不匹配(另请注意,格式字符串需要遵循DATE_FORMAT in the manual下列出的相同设置和规则)

您应始终将日期[时间]值存储在适当的数据类型中。看起来像日期的字符串仍然是字符串而 NOT 是日期。