use*_*298 7 sql sql-server sql-types copy
我正在尝试将表中的列中的数据类型从Float(null)更改为Varchar(25)(null).当前数据中最大的浮点数是12位数,但将来可能需要添加更多的数字varchar(25).
该列中的当前数据是电话号码.必须进行更改以允许前面的零.
但是,我在这方面遇到了一些困难.
我尝试过以下方法:
ALTER TABLE Customer
ALTER COLUMN Phonenumber varchar(25)
Run Code Online (Sandbox Code Playgroud)
这并没有给我想要的结果.
例如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'
Run Code Online (Sandbox Code Playgroud)
这也不起作用:
子查询返回的值超过1.当子查询跟随=,!=,<,<=,>,> =或子查询用作表达式时,不允许这样做.
而现在已经很晚了,我的头疼...
有人可以帮忙吗?
注意:
该表相当大,大约150万行,因此性能可能是一个问题.
使用SQL Server.
你可以通过decimal第一个来解决这个问题:
ALTER TABLE Customer ALTER COLUMN Phonenumber decimal(25, 0);
ALTER TABLE Customer ALTER COLUMN Phonenumber varchar(25);
Run Code Online (Sandbox Code Playgroud)
使用时会出现相同的行为cast():
select cast(cast(1549779498 as float) as varchar(255))
Run Code Online (Sandbox Code Playgroud)
所以修复程序说明如下:
select cast(cast(cast(1549779498 as float) as decimal(25)) as varchar(255))
Run Code Online (Sandbox Code Playgroud)
该文档为alter table alter column明确的引用cast():
某些数据类型更改可能会导致数据更改.例如,将nchar或nvarchar列更改为char或varchar可能会导致扩展字符的转换.有关更多信息,请参阅CAST和CONVERT(Transact-SQL).降低列的精度或比例可能会导致数据截断.
编辑:
加载数据后,我建议您还添加一个检查约束:
check (PhoneNumber not like '%[^0-9]%')
Run Code Online (Sandbox Code Playgroud)
这将确保将来在列中保留数字(仅限数字).
| 归档时间: |
|
| 查看次数: |
13024 次 |
| 最近记录: |