Как преобразовать текстовый тип данных в datetime в MySQL? - PullRequest
0 голосов
/ 18 ноября 2018

В базе данных mysql имя столбца создано. Этот «созданный» столбец является текстовым типом данных, мне нужно изменить его на datetime. Теперь в этом столбце так много данных. Можно ли его преобразовать или?

База данных выглядит как

created
18-11-15 18:21:25

Ожидаемый выходной результат равен

created
2018-11-15 18:21:25

Когда я выполняю

ALTER TABLE invoices MODIFY created datetime

Этот запрос дает неверные данные. Преобразование из 15-09-18С 03:03:43 по 2015-09-18 03: 03: 43

Ответы [ 4 ]

0 голосов
/ 18 ноября 2018

Сначала необходимо поменять день на год в столбце созданный следующим образом:

UPDATE invoices
SET created = CONCAT(SUBSTR(created, 7, 2), '-', SUBSTR(created, 4, 2), '-', SUBSTR(created, 1, 2));

Затем вы преобразуете столбец в DATETIME следующим образом:

ALTER TABLE invoices MODIFY created DATETIME;

Надеюсь, это поможет.

0 голосов
/ 18 ноября 2018

вы хотите конвертировать выходные данные или записи базы данных?во-вторых, вы можете использовать SQL-запрос:

ОБНОВЛЕНИЕ 'имя_ таблицы' SET 'создан' = CONCAT ('20 ',' создан ')

0 голосов
/ 18 ноября 2018

Если исходные данные не в формате MySQL Datetime ( ГГГГ-ММ-ДД ЧЧ: ММ: СС ), вы не можете просто изменить тип данных столбца с Varchar / Text на Дата / DateTime. В противном случае произойдет непоправимая потеря данных.

Это будет многошаговый процесс. Сначала вам нужно будет преобразовать строку даты в формат даты MySQL ( ГГГГ-ММ-ДД ЧЧ: ММ: СС ). Для этого мы можем использовать функцию STR_TO_DATE () .

Ваша строка даты образца (18-11-15 18:21:25) в основном в формате %y-%m-%d %T. Можно использовать следующие спецификаторы формата:

  • %d День месяца в виде числового значения (от 01 до 31)
  • %m Название месяца в виде числового значения (от 00 до 12)
  • %y Год как числовое, двузначное значение
  • %T Время в 24-часовом формате (чч: мм: сс)

Запрос на обновление даты будет выглядеть следующим образом:

UPDATE invoices  
SET created = STR_TO_DATE(created, '%y-%m-%d %T');

Теперь вы можете использовать Alter Table, чтобы изменить тип данных с Тип текста на Дата / время.

ALTER TABLE invoices 
MODIFY COLUMN created datetime;
0 голосов
/ 18 ноября 2018

Лучше всего 1002 * здесь - не сохранять даты в виде текста.Предполагая, что вы уже сделали это, мы можем справиться, позвонив STR_TO_DATE, чтобы сгенерировать достоверную дату:

SELECT
    STR_TO_DATE(created, '%y-%m-%d %h:%i:%s') AS created_out
FROM yourTable;

Поскольку вы ожидаете, что вы получите стандартную дату, мы можем остановиться здесь и избежать вызова DATE_FORMAT для генерации другого выхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...