数据库详细信息表名称(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'
您当前的日期字符串在秒后有.774Z
,但您的STR_TO_DATE()格式字符串不占该字符串。因此,警告您在字符串的末尾还有未解析的多余字符。
如果使用'%Y-%m-%dT%H:%i:%s.%fZ'
,警告将停止。
时间缺少格式的两部分:毫秒,.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中,这些转换问题就消失了。