2012-06-12 57 views
1

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

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

感谢

+0

可能重复[MYSQL:如何将包含日期的VARCHAR列转换为DATE列?](http://stackoverflow.com/questions/4223971/mysql-how-to-convert-varchar-column-containing-dates -to-date-column) –

回答

6

我这样做的方式:

(1)添加新的列:

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

(2)更新新列

UPDATE yourtable SET new_date = old_date; 

采取DATAS在old_date格式的照顾。如果它没有格式化为yyyy-mm-dd,那么您可能必须在STR_TO_DATE或这个UPDATE -statement中的一些字符串替换符合您的目的。

例子:

如果你的数据是这样的:mmmm dd, yyyy, hh:mm(体育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; 

完成!

+0

你能否提供一些步骤2的示例代码。日期栏包含这样的内容,目前2012年5月17日,8:36 pm,我想要像2012-05-17 –

+0

I运行这个查询它说没有行受到影响... UPDATE mc_boxes_has_downloads SET new_date = DATE_FORMAT(old_date,'%Y-%m-%d'); –

+0

我已经添加了一个示例。目前的格式是什么? – Bjoern

0

使用此查询:

ALTER TABLE tablename MODIFY COLUMNNAME Datatype 

例如

ALTER TABLE Users MODIFY RegisterDate DateTime 
0

添加数据类型,你想要一个新列,然后运行更新查询将数据从旧的列复制到新列。然后删除旧列。

请注意,也许您将不得不使用CONVERT函数将日期字符串转换为日期时间。

1

什么:

1)添加新列的权利类型

2)删除旧列

更新解析日期

3)更新您的新列填写日期格式解析要求:

SELECT STR_TO_DATE('May 17, 2012, 8:36 pm','%M %d, %Y'); 
+0

您能否提供一些步骤2的示例代码。日期列包含这样的内容,目前2012年5月17日,晚上8:36,我想要2012-05-17 –

+0

这是简单如SELECT STR_TO_DATE('2012年5月17日,晚上8:36','%M%d,%Y'); –

+0

我正在尝试此更新mc_boxes_has_downloads SET new_date = STR_TO_DATE(date,'%Y-%m-%d');但它不影响任何行 –