[英]How to change column datatype in SQL Server and convert previous type without losing data
我有一个 SQL Server 数据库,我想更改列类型以减小它的大小:
我有一个字符串 Name Varchar(100)
并想将其转换为Varchar(50)
并且我必须将数据移动到它(数据将适合varchar(50)
)
我有一个Varchar(30)
将时间表示为纪元时间(例如1508752574 )。 我想将类型更改为Datetime
并将数据形式Varchar(30)
转换为Datetime
然后将其放入Datetime
我可以在不丢失数据的情况下做到这一点吗?
第 1 点
ALTER TABLE dbo.table_name ALTER COLUMN name VARCHAR(50);
第 2 点您需要添加另一列Datetime
类型,并使用 epoch_time_col 的Datetime
等效项更新该列。
ALTER TABLE dbo.table_name ADD epoch_time_dt DATETIME NULL;
UPDATE dbo.table_name SET epoch_time_dt = DATEADD(SECOND, epoch_time_col, '19700101');
如果需要,您可以删除旧列
ALTER TABLE dbo.table_name DROP COLUMN epoch_time_col ;
创建新列:
Alter table MyTable
add NewColumn1 varchar(50);
Alter table MyTable
add NewColumn2 datetime;
填写数据:
update MyTable
set NewColumn1 = left(Name,50),
NewColumn2 = dateadd(s, epochcol1, '19700101');
然后,您可以删除旧列并重命名新列
我没有看到任何数据丢失问题..
我有一个字符串 Name Varchar(100) 并想将其转换为 Varchar(50) 并且我必须将数据移动到它(数据将适合 varchar(50))
不会有数据丢失,如果您的数据适合 varchar(50) 数据类型,如果数据不适合插入将失败,您可以纠正
此外,在使用以下方法将您的纪元值转换为日期时间时,我没有看到任何数据丢失问题,因为您只是添加秒数
Select
dateadd(S, [unixtime], '1970-01-01')
From [Table]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.