繁体   English   中英

更改表列数据类型

[英]Alter table column datatype

我想从TIME数据类型将列的类型更改为一个SMALL int,其数量为午夜后的秒数而不更改名称。

我有一个select语句进行此更改,但我想知道是否有一种方法可以直接更改数据类型而不创建临时字段。

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

我认为你不能像这样一举改变架构和数据。 这并不是说你不能原子地做 - 你可以根据你的存储引擎使用一个事务。 但是你将不得不分步进行。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM