我正在尝试将表中一列中的数据类型从Float
(空)更改为Varchar(25)
(空)。当前数据中最大的浮点数是12位数字,但是将来可能需要添加更多数字,因此varchar(25)
。
列中的当前数据是电话号码。必须进行更改以允许前面的零。
但是,我在执行此操作时遇到了一些困难。
我尝试了以下方法:
ALTER TABLE Customer
ALTER COLUMN Phonenumber varchar(25)
这不能给我期望的结果。
例如
1549779498
变成1.54978e+009
然后,我尝试了以下方式:
PhonenumberVarchar
代码:
ALTER TABLE Customer
ADD PhonenumberVarchar varchar(25)
UPDATE Customer
SET PhonenumberVarchar = STR(Phonenumber, 12, 0)
ALTER TABLE Customer
DROP COLUMN Phonenumber
EXEC sp_rename 'Customer.PhonenumberVarchar', 'Phonenumber', 'COLUMN'
这也不起作用:
现在已经很晚了,我的头好痛...
有人可以帮忙吗?
笔记:
该表相当大,大约有150万行,因此性能可能成为一个问题。
使用SQL Server。
最佳答案
您可以先通过decimal
来解决此问题:
ALTER TABLE Customer ALTER COLUMN Phonenumber decimal(25, 0);
ALTER TABLE Customer ALTER COLUMN Phonenumber varchar(25);
使用
cast()
时,您会得到相同的行为:select cast(cast(1549779498 as float) as varchar(255))
因此,修复方法如下所示:
select cast(cast(cast(1549779498 as float) as decimal(25)) as varchar(255))
alter table alter column
的documentation明确引用cast()
:编辑:
加载数据后,我建议您还添加一个检查约束:
check (PhoneNumber not like '%[^0-9]%')
这将确保将来仅在该列中保留数字(仅数字)。