sql >> Database teknologi >  >> RDS >> Mysql

Konverter varchar(40) til datetime-kolonnen

To ting:

For det første skal dit str_to_date()-format matche formatet på inputstrengen. Hvis din inputstreng er 10/21/2016 15:02 , så er dit format %m/%d/%Y %H:%i .

Se en reference til formatkoderne her:https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_date-format

For det andet ændrer brugen af ​​UPDATE ikke kolonnens datatype, det ændrer blot indholdet af varchar-strengen.

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 |
+---------------------+

Nu er det i det rigtige format, men det er stadig en varchar.

mysql> alter table t modify v datetime;

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

Nu er datatypen blevet ændret.

mysql> show create table t\G

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



  1. Hvordan bruger man et funktionsbaseret indeks på en kolonne, der indeholder NULL'er i Oracle 10+?

  2. MySQL:Flet to forskellige tabeller uden JOIN eller UNION

  3. implementer applikation med OraOLEDB-udbyder

  4. VÆLG DISTINCT kun de første fire numre