2011-11-01 15 views
11

SQL Server 2008でVarcharをIntに変換する方法SQL Server 2008でVarcharをIntに変換する方法は?

VarcharをIntに変換することを許可していないときは、次のコードがあります。

Select Cast([Column1] as INT) 

Column1はVARCHAR(21)NOT NULL型で、Intに変換したいと思います。 実際に私はフィールドをINTとして持つ別のテーブルにColumn1を挿入しようとしています。 誰かがこれを変換するのを助けてくれますか?

答えて

13

スペースを使用し、問題になります。

declare @v1 varchar(21) = '66', 
     @v2 varchar(21) = ' 66 ', 
     @v3 varchar(21) = '66' + char(13) + char(10), 
     @v4 varchar(21) = char(9) + '66' 

select cast(@v1 as int) -- ok 
select cast(@v2 as int) -- ok 
select cast(@v3 as int) -- error 
select cast(@v4 as int) -- error 

は、これらの文字のために、あなたの入力をチェックして、あなたがそれらを見つけた場合、あなたのデータをクリーンアップするためにREPLACEを使用します。

たとえば、次のようにしてみてください。これは頻繁に起きて何かがある場合は、データをクリーンアップするために、それが良いだろう、

select cast(replace(replace(@v3, char(13), ''), char(10), '') as int) 

をして変更します。あなたのコメントパー


、あなたはあなたのcastの一部としてREPLACEを使用することができますテーブルが入力される前に、CRおよびLFが削除されます。

+0

はい、あなたは '@ v3'で私のシナリオと同じ条件がありますので、それ以上の方法や解決策があるので、私たちはそれをvarcharからintに変換できますか? –

+0

@VikrantMore、 'CRLF'を削除するための' REPLACE'の使用を含むように私の答えを更新しました。 –

2

それはあなたがそれを行う方法です、それはエラーを投げているのですか?変換しようとしている値が変換可能であることを確かめていますか?明らかな理由から、abc123をintに変換することはできません。あなたのコメントに基づいて

UPDATE

私はあなたが変換しようとしている値である任意のスペースを削除します。

+0

@AbeMiesslerから/ はい、その列の私の値は、単一の文字はありませんが、あった66か2です末尾の空白スペースのみを残します。 –

+1

それはどんなエラーを投げていますか?そこにスペースがないのは確かですか? –

+0

NULL値はありますか? – Eric

1

これは、アルファ文字やNULL値を持たない限り、それをINTに変換する正しい方法です。あなたが任意のNULL値を持っている場合は

LTRIMまたはRTRIMによってトリミングされることはありません、スペースとして表示されますが、文字TABCRまたはLFのように、castのために問題になることはありません

ISNULL(column1, 0) 
+0

はい、私はISNULLについて知っていますが、私たちは手動でVarcharからIntに変換する必要があるNull値はありません。 –

+1

彼は、列に 'NOT NULL'が強制されていると主張します。 –

+0

Select convert(int、 'Au')を使用していますが、変換エラーが発生しています。 手がかりはありますか? ありがとう –

8

あなたは変換機能を使用することができます。

Select convert(int,[Column1]) 
0

は、次のコードを試してみてください。ほとんどの場合、コンマの問題が原因です。

cast(replace([FIELD NAME],',','') as float) 
0

は、以下のコマンドを使用して試してみてください、そして、それは

選択ケースをINTするすべての値を要求しますときYourColumn +」(ISNUMERIC。0E0' )= 1 はその後 他のNULL エンド/ *の場合)intとして(YourColumnをキャスト* YourTable

関連する問題