MySQL:更新表格列,同时格式化日期格式为其他格式不起作用

时间:2018-04-03 11:07:40

标签: java mysql sql mysql-workbench mysql-error-1064

我正在使用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                                                 

有人可以帮帮我吗?

1 个答案:

答案 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的调用正确捕获了时间戳的日期和时间部分。

Demo