我有個問題,我該如何將數據類型爲nvarchar
的SQL Server列轉換爲浮點數?將nvarchar的全列轉換爲浮點數
經典查詢:
ALTER TABLE <column>
ALTER COLUMN <column> FLOAT;
只有一個空列的作品。
有沒有辦法做到這一點?
謝謝!
我有個問題,我該如何將數據類型爲nvarchar
的SQL Server列轉換爲浮點數?將nvarchar的全列轉換爲浮點數
經典查詢:
ALTER TABLE <column>
ALTER COLUMN <column> FLOAT;
只有一個空列的作品。
有沒有辦法做到這一點?
謝謝!
應使用以下語法:
ALTER TABLE table_name
ALTER COLUMN column_name datatype
正常經典的查詢工作即使採用的數據,不僅是空的列。但是當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
當我嘗試這個腳本:創建表#T1 ( ID浮動 ) INSERT INTO從#T#T1 選擇try_convert(浮動,ID),所以在新表格只有
新表格您將擁有1,2個空值 – TheGameiswar
'TRY_CONVERT'是SQL Server ** 2012 **中的**新功能**,不適用於早期版本的SQL Server –
添加新的浮動欄,複製數據,刪除舊列,重命名新列? – jarlh
你的代碼幾乎是正確的只是用表名 – GuidoG
替換第一個我有54列,我需要更改數據類型。我想我需要更多的自動 –
michal