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
?
答案 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;