sql >> Databáze >  >> RDS >> Mysql

Nelze převést varchar na datetime v MySql

Zmíněné tři kroky @Arkain by byly s pomocí funkce 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`;

Úplný seznam specifikátorů pro STR_TO_DATE lze nalézt na DATE_FORMAT , zde je úryvek s těmi, které jsem použil:

%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

Ukázka AKTUALIZACE

Pokud by nový sloupec měl mít atribut NOT NOLL, jedním ze způsobů by mohlo být nastavení režimu sql před operací na '' a resetování sql_mode později:

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;

Aktualizovaná ukázka



  1. Mapování Doctrine 2 odkazující na jedinečný klíč

  2. Autonomní transakce v PostgreSQL 9.1

  3. LazyInitializationException se pokouší získat líně inicializovanou instanci

  4. ERROR 1366 (HY000):Nesprávná hodnota řetězce:'\xF0\x9F\x98\x9C' pro sloupec 'komentář' na řádku 1