我正在尝试将表中一列中的数据类型从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 columndocumentation明确引用cast():



    编辑:

    加载数据后,我建议您还添加一个检查约束:
    check (PhoneNumber not like '%[^0-9]%')
    

    这将确保将来仅在该列中保留数字(仅数字)。

    10-07 17:48