嘿,我有一个SQL表,它有一个用于存储日期的列,但日期列具有类型varchar。我想将类型更改为日期,但我不希望实际数据在该列中丢失。我怎样才能做到这一点。更改SQL中的列类型
手动备份表格,然后输入每个条目?或者还有其他一些很酷的方法来做到这一点?其实数据是巨大的
感谢
嘿,我有一个SQL表,它有一个用于存储日期的列,但日期列具有类型varchar。我想将类型更改为日期,但我不希望实际数据在该列中丢失。我怎样才能做到这一点。更改SQL中的列类型
手动备份表格,然后输入每个条目?或者还有其他一些很酷的方法来做到这一点?其实数据是巨大的
感谢
我这样做的方式:
(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;
完成!
你能否提供一些步骤2的示例代码。日期栏包含这样的内容,目前2012年5月17日,8:36 pm,我想要像2012-05-17 –
I运行这个查询它说没有行受到影响... UPDATE mc_boxes_has_downloads SET new_date = DATE_FORMAT(old_date,'%Y-%m-%d'); –
我已经添加了一个示例。目前的格式是什么? – Bjoern
使用此查询:
ALTER TABLE tablename MODIFY COLUMNNAME Datatype
例如
ALTER TABLE Users MODIFY RegisterDate DateTime
添加数据类型,你想要一个新列,然后运行更新查询将数据从旧的列复制到新列。然后删除旧列。
请注意,也许您将不得不使用CONVERT函数将日期字符串转换为日期时间。
什么:
1)添加新列的权利类型
2)删除旧列
更新解析日期
3)更新您的新列填写日期格式解析要求:
SELECT STR_TO_DATE('May 17, 2012, 8:36 pm','%M %d, %Y');
您能否提供一些步骤2的示例代码。日期列包含这样的内容,目前2012年5月17日,晚上8:36,我想要2012-05-17 –
这是简单如SELECT STR_TO_DATE('2012年5月17日,晚上8:36','%M%d,%Y'); –
我正在尝试此更新mc_boxes_has_downloads SET new_date = STR_TO_DATE(date,'%Y-%m-%d');但它不影响任何行 –
可能重复[MYSQL:如何将包含日期的VARCHAR列转换为DATE列?](http://stackoverflow.com/questions/4223971/mysql-how-to-convert-varchar-column-containing-dates -to-date-column) –