繁体   English   中英

如何在 SQL Server 中更改列数据类型并转换以前的类型而不丢失数据

[英]How to change column datatype in SQL Server and convert previous type without losing data

我有一个 SQL Server 数据库,我想更改列类型以减小它的大小:

  1. 我有一个字符串 Name Varchar(100)并想将其转换为Varchar(50)并且我必须将数据移动到它(数据将适合varchar(50)

  2. 我有一个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.

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