Если данные varchar
были отформатированы, как это " 2014-09-20 19:45 'будет изменен тип данных вашей колонки. Зачем? это представление символов, используемое DATETIME
и другими ориентированными на время типами данных.
Но это не так. Итак, какой у вас выбор? Один использовать эти четыре шага:
- изменить таблицу, чтобы добавить новый
DATETIME
столбец с временным именем
- сделать
UPDATE
, не WHERE
пункта, чтобы заполнить значения этого столбца
- альтер таблица для удаления предыдущего столбца
- измените таблицу, чтобы переименовать новый столбец, чтобы иметь то же имя, что и столбец, который вы только что сбросили.
Вот как это будет происходить.
ALTER TABLE my_table ADD COLUMN tempstamp DATETIME
UPDATE my_table SET tempstamp = STR_TO_DATE(_time, '%Y%m%d%H%i')
ALTER TABLE my_table DROP COLUMN _time
ALTER TABLE my_table CHANGE tempstamp _time DATETIME NOT NULL
Другой подход: Изменение строки в ваших _time
до допустимых значений даты и времени, а затем изменить вашу колонку. Если ваши varchars()
достаточно широкие, чтобы удерживать несколько дополнительных символов, попробуйте это.
UPDATE my_table SET `_time`=STR_TO_DATE(`_time`, '%Y%m%d%H%i')
ALTER TABLE my_table CHANGE `_time` `_time` DATETIME NOT NULL
Это работает, потому что STR_TO_DATE()
делает DATETIME
значения ваших строк, а затем MySQL отбрасывает их обратно в строки для хранения обратно в varchar
колонку. Затем вы можете изменить тип данных на DATETIME
.
Возможно, вы заметили, что я бросил NOT NULL
. Если вы поместите индекс в этот столбец, то NOT NULL
- хорошая вещь. Но если некоторые из ваших значений времени отсутствуют, это не сработает.
Я бы добавил новый столбец с правильным типом, запустил обновление, чтобы выполнить соответствующее преобразование данных, а затем отбросить старый столбец –
@Arkain, соответствует ли дата даты? –
@Arkain, как пользователь будет обновлять данные с использованием существующих данных. (Данные старого формата) –