sql >> Databasteknik >  >> RDS >> Mysql

Det går inte att konvertera varchar till datetime i MySql

De tre stegen @Arkain som nämns skulle vara med hjälp av funktionen 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`;

Den fullständiga listan över specifikationer för STR_TO_DATE finns på DATE_FORMAT , här ett utdrag med de jag använde:

%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 av UPPDATERING

Om den nya kolumnen ska ha attributet NOT NOLL, kan ett sätt vara att ställa in sql-läget före operationen till '' och återställa sql_mode senare:

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;

Uppdaterad demo



  1. postgresql date_trunc till godtycklig precision?

  2. Vad jag ska välja - JSON eller SQLite?

  3. Sqlite eller MySql? Hur bestämmer man sig?

  4. 2 sätt att få storleken på en databas i PostgreSQL