Времена состоят из двух частей, в которых отсутствует ваш формат: миллисекунды, часть .774
и часовой пояс "зулу" Z
.
select STR_TO_DATE('2020-04-19T18:56:09.774Z', '%Y-%m-%dT%H:%i:%s.%fZ');
Однако, поскольку вы все равно их усекаете Я бы использовал менее ограничительный формат и просто проигнорировал бы предупреждение.
Поскольку строка уже имеет формат ISO 8601 , вы можете пропустить 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 является действительным указателем часового пояса .
Обратите внимание, что это будет приходится на часовой пояс. Это может или не может быть тем, что вы хотите.
-- 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
. Тогда все хранится в UT C и эти проблемы преобразования go прочь.