Ошибка: обновить значения Varchar до Datetime в MySQL - PullRequest
0 голосов
/ 19 апреля 2020

DB DETAIL Имя таблицы (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'

Ответы [ 2 ]

1 голос
/ 19 апреля 2020

Времена состоят из двух частей, в которых отсутствует ваш формат: миллисекунды, часть .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 прочь.

1 голос
/ 19 апреля 2020

Ваша текущая строка даты имеет .774Z после секунд, но ваша строка формата STR_TO_DATE () не учитывает это. Поэтому он предупреждает вас, что в конце строки есть дополнительные символы, которые не были проанализированы.

Если вы используете '%Y-%m-%dT%H:%i:%s.%fZ', предупреждение прекращается.

...