2013-08-29 89 views
4

我想在不改變名稱的情況下將列的類型從TIME數據類型更改爲SMALL int,以秒爲單位。改變表列數據類型

我有一個選擇語句,使這種變化,但我想知道是否有一種方法來直接更改數據類型,而不創建臨時字段。

select ROUND(convert(begin_time, UNSIGNED)/100) % 100 + 
     60 * ROUND(convert(begin_time, UNSIGNED)/10000) from time_window; 

回答

1

我不認爲你可以像這樣一次改變模式和數據。這並不是說你不能這樣做原子 - 你可以使用一個交易取決於你的存儲引擎。但是你將不得不一步步做到這一點。

1)更改舊列的名稱。

ALTER TABLE time_window CHANGE COLUMN begin_time begin_time_old TIME; 

2)添加一個類型爲SMALL的新列,該列的舊名稱用於存儲新數據。

ALTER TABLE time_window ADD COLUMN begin_time SMALL; 

3)使用您的轉換插入數據。

UPDATE time_window 
SET begin_time = ROUND(convert(begin_time_old, UNSIGNED)/100) % 100 + 
60 * ROUND(convert(begin_time_old, UNSIGNED)/10000) 

4)丟棄舊列。

ALTER TABLE time_window DROP COLUMN begin_time_old