2016-06-23 36 views
0

我有個問題,我該如何將數據類型爲nvarchar的SQL Server列轉換爲浮點數?將nvarchar的全列轉換爲浮點數

經典查詢:

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

只有一個空列的作品。

有沒有辦法做到這一點?

謝謝!

+4

添加新的浮動欄,複製數據,刪除舊列,重命名新列? – jarlh

+0

你的代碼幾乎是正確的只是用表名 – GuidoG

+0

替換第一個我有54列,我需要更改數據類型。我想我需要更多的自動 – michal

回答

0

應使用以下語法:

ALTER TABLE table_name 
ALTER COLUMN column_name datatype 
+0

這已經在使用,請正確閱讀這個問題 –

+0

它的同樣的問題。 – michal

+0

沒有他使用ALTER TABLE colum_name如果我正確讀取 –

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 
+0

當我嘗試這個腳本:創建表#T1 ( ID浮動 ) INSERT INTO從#T#T1 選擇try_convert(浮動,ID),所以在新表格只有值.. – michal

+0

新表格您將擁有1,2個空值 – TheGameiswar

+1

'TRY_CONVERT'是SQL Server ** 2012 **中的**新功能**,不適用於早期版本的SQL Server –