2012-06-12 54 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');但它不影響任何行 –