如何在mysql中更改字段的类型?

时间:2019-11-04 07:40:12

标签: mysql

target表中有33个字段,report_date字段的类型是文本。

select report_date from   target  limit 10;
+--------------+
| report_date  |
+--------------+
| 2015/06      |
| 2016/06      |
| 2017/06      |
| 2018/06      |
| 2019/06      |
| 2014/12      |
| 2015/12      |
| 2016/12      |
| 2017/12      |
| 2018/12      |
+--------------+
10 rows in set (0.00 sec)

现在我想将表report_date中字段target的类型从text更改为date
report_date的记录格式为2018/12,仅包含年份和月份,以下MySQL命令无法根据需要更改字段的类型。

alter table target modify columns  report_date date;

MySQL命令只能将字段report_date的类型更改为我想要的类型。

select str_to_date(report_date, '%Y/%m') from target;

如何创建一个新表new_target来更改report_date类型的字段date,而其他32个字段保持不变,例如表target

2 个答案:

答案 0 :(得分:1)

应该对字符串进行一些操作,同时将create..as选择为..-但要小心地重建键

drop table if exists t,t1;

create table t(id int auto_increment primary key, dt varchar(10));

insert into t (dt) values
('2019/01'),('2019/02');

create table t1 as
select id,str_to_date(concat(dt,'/01'),'%Y/%m/%d') dt
from t;

alter table t1 
    modify column id int auto_increment primary key;


select * from t1;

+----+------------+
| id | dt         |
+----+------------+
|  1 | 2019-01-01 |
|  2 | 2019-02-01 |
+----+------------+
2 rows in set (0.00 sec)

答案 1 :(得分:0)

要修改/更改列的数据类型,您需要先将记录转换为完整的日期字符串。

您可以简单地尝试获取具有现有数据类型的记录。

  

SELECT DATE_FORMAT(REPLACE(CONCAT(report_date,'/ 01'),'/','-'),   '%Y /%m')作为距离目标LIMIT 10的report_date;