我有一个SQL Server数据库,我想更改列类型以减小它的大小:
我有一个名为Varchar(100)
的字符串,并希望将其转换为Varchar(50)
并且我必须将数据移至它(数据将适合varchar(50)
)
我有Varchar(30)
表示时间作为纪元时间(例如 1508752574 )。我想将类型更改为Datetime
并将数据从Varchar(30)
转换为Datetime
,然后将其放入Datetime
我可以在不丢失数据的情况下完成吗?
答案 0 :(得分:0)
创建新列:
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');
然后,您可以删除旧列并重命名新列
答案 1 :(得分:0)
我没有看到任何数据丢失问题。
我有一个字符串名称Varchar(100),并希望将其转换为Varchar(50)并且我必须将数据移动到它(数据将适合varchar(50))
如果您的数据适合varchar(50)数据类型,则不会丢失数据,如果数据不适合插入将失败并且您可以纠正
此外,在使用below approach将您的纪元值转换为日期时间时,我没有发现任何数据丢失问题,因为您只需添加秒数
Select
dateadd(S, [unixtime], '1970-01-01')
From [Table]
答案 2 :(得分:0)
第1点
ALTER TABLE dbo.table_name ALTER COLUMN name VARCHAR(50);
第2点
您需要添加另一个Datetime
类型的列,并使用Datetime
等效的epoch_time_col更新列。
ALTER TABLE dbo.table_name ADD epoch_time_dt DATETIME NULL;
UPDATE dbo.table SET epoch_time_dt = DATEADD(SECOND, epoch_time_col, '19700101');
如果需要,您可以删除旧列
ALTER TABLE dbo.table_name DROP COLUMN epoch_time_col ;