我有一个问题如何将具有nvarchar
类型数据的SQL Server列转换为浮动?
经典查询:
ALTER TABLE <column>
ALTER COLUMN <column> FLOAT;
仅适用于空列。
有没有办法做到这一点?
谢谢!
答案 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