Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Converter varchar (40) para coluna de data e hora


Duas coisas:

Primeiro, seu formato str_to_date() deve corresponder ao formato da string de entrada. Se sua string de entrada for 10/21/2016 15:02 , seu formato será %m/%d/%Y %H:%i .

Veja uma referência para os códigos de formato aqui:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format

Segundo, usar UPDATE não altera o tipo de dados da coluna, apenas altera o conteúdo da string varchar.
mysql> create table t (v varchar(50));

mysql> insert into t values ('10/21/2016 15:02');

mysql> update t set v = str_to_date(v, '%m/%d/%Y %H:%i');

mysql> select * from t;
+---------------------+
| v                   |
+---------------------+
| 2016-10-21 15:02:00 |
+---------------------+

Agora está no formato certo, mas ainda é um varchar.
mysql> alter table t modify v datetime;

mysql> select * from t;
+---------------------+
| v                   |
+---------------------+
| 2016-10-21 15:02:00 |
+---------------------+

Agora o tipo de dados foi alterado.
mysql> show create table t\G

CREATE TABLE `t` (
  `v` datetime DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4