我正在使用DATE_FORMAT和STR_TO_DATE函数更新表的日期列字段,但这根本不起作用。如果我使用的是 DATE_FORMAT ,那么它会给我一个错误,
错误代码:1292。截断错误的日期时间值:' 2018-03-24T12:20:16 + 0000'
如果我使用的是 STR_TO_DATE ,那么它会给我一个错误,
错误代码:1411。错误的时间值:' T12:20:16 + 0000'对于函数str_to_date
我的查询是:
update quality
set analysedAt = DATE_FORMAT(analysedAt,'%Y-%m-%d %T')
where qualityId = 3;
anaylseAt = 2018-03-27T12:25:16+0000
有人可以帮帮我吗?
答案 0 :(得分:1)
如果你想从一个字符串转到一个日期,那么你应该使用的函数是STR_TO_DATE
,而不是DATE_FORMAT
,这是相反的方向。但是你有一个更大的问题,因为看起来analysedAt
列是文本,你将无法用日期更新它。即使你可以通过一些隐含的转换,你仍然会再次陷入文本,打败了整个目的。
我建议添加一个新的datetime列,然后更新它:
UPDATE quality
SET new_date = STR_TO_DATE(analysedAt, '%Y-%m-%dT%H:%i:%s');
之后,如果您不再需要,可以删除analysedAt
列:
ALTER TABLE quality DROP analysedAt;
下面有一个演示链接,显示上面对STR_TO_DATE
的调用正确捕获了时间戳的日期和时间部分。