错误:在MySQL中将Varchar值更新为Datetime

问题描述 投票:0回答:2

数据库详细信息表名称(KK)-

id      name         date(varchar(50))                         

1       Ayush        2020-04-19T18:56:09.774Z     

我正在使用此查询进行转换-

update KK set date=DATE_FORMAT(STR_TO_DATE( KK.date, '%Y-%m-%dT%H:%i:%s' ), '%Y-%m-%d %T') where id=1;

收到此错误

错误代码:1292。截断了错误的日期时间值:'2020-04-19T18:56:09.774Z'

mysql date-formatting
2个回答
0
投票

您当前的日期字符串在秒后有.774Z,但您的STR_TO_DATE()格式字符串不占该字符串。因此,警告您在字符串的末尾还有未解析的多余字符。

如果使用'%Y-%m-%dT%H:%i:%s.%fZ',警告将停止。


0
投票

时间缺少格式的两部分:毫秒,.774部分和“ zulu”时区Z

select STR_TO_DATE('2020-04-19T18:56:09.774Z', '%Y-%m-%dT%H:%i:%s.%fZ');

但是,由于您还是要截断它们,因此我将使用限制性较小的格式,而忽略警告。


由于字符串已经在ISO 8601 format中,因此您可以跳过str_to_date

mysql> select DATE_FORMAT('2020-04-19T18:56:09.774Z', '%Y-%m-%d %T');
+--------------------------------------------------------+
| DATE_FORMAT('2020-04-19T18:56:09.774Z', '%Y-%m-%d %T') |
+--------------------------------------------------------+
| 2020-04-19 18:56:09                                    |
+--------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

MySQL警告是因为它似乎不了解Z是有效的time zone designator

请注意,此占一个时区。这可能是您想要的,也可能不是。

-- date_format will display in the current time zone.
-- I'm in -07:00, so a +00:00 (UTC) date is displayed -7 hours.
mysql> select DATE_FORMAT('2020-04-19T18:56:09.777+00:00', '%Y-%m-%d %T');
+-------------------------------------------------------------+
| DATE_FORMAT('2020-04-19T18:56:09.777+00:00', '%Y-%m-%d %T') |
+-------------------------------------------------------------+
| 2020-04-19 11:56:09                                         |
+-------------------------------------------------------------+
1 row in set (0.00 sec)

并且,最后,考虑将该列更改为datetime类型。然后,所有内容都存储在UTC中,这些转换问题就消失了。

© www.soinside.com 2019 - 2024. All rights reserved.