将完整列从nvarchar转换为float

时间:2016-06-23 11:16:11

标签: sql sql-server

我有一个问题如何将具有nvarchar类型数据的SQL Server列转换为浮动?

经典查询:

ALTER TABLE <column>
ALTER COLUMN <column> FLOAT;

仅适用于空列。

有没有办法做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:1)

普通经典查询即使对具有数据的列也有效,而不仅仅是空数据。但是,Nvarchar列包含不兼容的数据时会出现问题。所以最好的选择是创建一个新表或创建新列并使用Try_Convert .. (仅限SQL Server 2012)

这有效:

create table #t
(
    id nvarchar(3)
)

insert into #t
    select 1
    union all
    select 2

alter table #t
alter column id float--this works

此操作失败:

create table #t
(
   id nvarchar(3)
)

insert into #t
select 1
union all
select 2

insert into #t
select 'a'

alter table #t
alter column id float--this fails

所以最好的方法是使用try_convert并对空值进行决策,这是不兼容的数据

create table #t1
(
    id float
)

insert into #t1
    select try_convert(float, id) 
    from #t

更新:

如果您使用的是SQL Server 2008 R2或更低版本,则可以使用此技术代替TRY_Convert。取自Mikael excellent answer

declare @T table
(
  Col varchar(50)
)

insert into @T values
('1'),
('1.1'),
('1,1'),
('1a')

select cast('' as xml).value('sql:column("Col") cast as xs:decimal ?', 
                             'decimal(28,10)') as Col
from @T

输出

Col
-------------
1.0000000000
1.1000000000
NULL
NULL

答案 1 :(得分:0)

您应该使用以下语法:

ALTER TABLE table_name
ALTER COLUMN column_name datatype