1

嘿,我有一个 SQL 表,其中有一列用于存储日期,但日期列的类型为 varchar。我想将类型更改为日期,但我不希望该列中的实际数据丢失。我怎样才能做到这一点。

手动备份表格然后输入每个条目?还是有其他很酷的方法可以做到这一点?其实数据很大

谢谢

4

4 回答 4

6

我这样做的方式:

(1) 添加新列:

ALTER TABLE yourtable 
ADD COLUMN `new_date` DATE NULL AFTER `views`; 

(2) 更新新列

UPDATE yourtable SET new_date = old_date;

注意old_date. 如果它不是 formatted yyyy-mm-dd,您可能必须在此-statement中进行STR_TO_DATE一些字符串替换以适合您的目的。UPDATE

例子:

如果您的数据如下所示:mmmm dd, yyyy, hh:mm(pe May 17, 2012, 8:36 pm) ,您可以像这样更新:

UPDATE yourtable
SET new_date = STR_TO_DATE(old_date, "%M %e, %Y");

STR_TO_DATE基本上逆向工程师将字符串数据转换为日期值。

(3) 删除旧列

ALTER TABLE yourtable 
DROP COLUMN `old_date`; 

(4) 重命名新列

ALTER TABLE yourtable 
CHANGE `new_date` `old_date` DATE NULL; 

完毕!

于 2012-06-12T09:14:56.880 回答
1

关于什么:

1)添加具有正确类型的新列

2)用解析的日期更新你的新列

3)删除旧列

更新以填充日期模式解析要求:

SELECT STR_TO_DATE('May 17, 2012, 8:36 pm','%M %d, %Y');
于 2012-06-12T09:13:20.477 回答
0

使用此查询:

ALTER TABLE tablename MODIFY COLUMNNAME Datatype

例如

ALTER TABLE Users MODIFY RegisterDate DateTime
于 2012-06-12T09:12:10.883 回答
0

添加具有所需数据类型的新列,然后运行 ​​UPDATE 查询以将数据从旧列复制到新列。然后删除旧列。

请注意,您可能必须使用 CONVERT 函数将日期字符串转换为日期时间。

于 2012-06-12T09:12:35.033 回答