質問がありますnvarchar
のデータを持つSQL Server列をfloatに変換するにはどうすればよいですか?nvarcharからfloatに完全な列を変換する
クラシッククエリ:
ALTER TABLE <column>
ALTER COLUMN <column> FLOAT;
は空の列でのみ動作します。
これを行う方法はありますか?
ありがとうございます!
質問がありますnvarchar
のデータを持つSQL Server列をfloatに変換するにはどうすればよいですか?nvarcharからfloatに完全な列を変換する
クラシッククエリ:
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
を使用し、互換性のないデータであるNULL値を決定するのが最も良い方法です
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
それを読めば、彼はのALTER TABLE colum_nameを使用していません:#t1の に挿入テーブル#t1の ( IDフロート ) を作成するが、そうでは#tから(フロート、ID)try_convertを選択新しいテーブルは
新しいテーブルは1,2、ヌル値 – TheGameiswar
です。 'TRY_CONVERT'はSQL Server ** 2012 ** **の新機能**です。以前のバージョンのユーザーは利用できません。 SQL Server –
、新しいfloat列を追加し、データをコピーし、古い列を削除し、新しい列の名前を変更? – jarlh
あなたのコードはほぼ正確です。ちょうど最初のをtablenameに置き換えてください。 –
GuidoG
私は54の列にデータ型を変更する必要があります。私はもっと自動のものが必要だと思います。 – michal