Mysql
 sql >> Datenbank >  >> RDS >> Mysql

varchar kann in MySQL nicht in datetime konvertiert werden

Die drei von @Arkain erwähnten Schritte wären mit Hilfe der Funktion STR_TO_DATE

-- add the new column
ALTER TABLE `my_table` ADD COLUMN `date_time` DATETIME; 

-- update the new column with the help of the function STR_TO_DATE
UPDATE `my_table` SET `date_time` = STR_TO_DATE(`_time`, '%Y%m%d%H%i');

-- drop the old column
ALTER TABLE `my_table` DROP COLUMN `_time`;

Die vollständige Liste der Spezifizierer für STR_TO_DATE finden Sie unter DATE_FORMAT , hier ein Auszug mit denen, die ich verwendet habe:

%d  Day of the month, numeric (00..31)
%H  Hour (00..23)
%i  Minutes, numeric (00..59)
%m  Month, numeric (00..12)
%Y  Year, numeric, four digits

Demo des UPDATE

Wenn die neue Spalte das Attribut NOT NOLL haben soll, könnte eine Möglichkeit sein, den sql mode vor der Operation auf '' zu setzen und den sql_mode später zurückzusetzen:

SET @old_mode = @@sql_mode;
SET @@sql_mode = '';        -- permits zero values in DATETIME columns

ALTER TABLE `my_table` ADD COLUMN `date_time` DATETIME NOT NULL; 
UPDATE `my_table` SET `date_time` = STR_TO_DATE(`_time`, '%Y%m%d%H%i');
ALTER TABLE `my_table` DROP COLUMN `_time`;

SET @@sql_mode = @old_mode;

Aktualisierte Demo