web-dev-qa-db-ja.com

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

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

実行しようとしたときに次のコードがあり、VarcharをIntに変換できませんでした。

Select Cast([Column1] as INT) 

Column1はVarchar(21)NOT NULL型であり、Intに変換したかった。実際、私はColumn1をINTとしてFieldを持つ別のテーブルに挿入しようとしています。誰かがこれを変換するのを手伝ってくれますか?

14
Vikrant More

castではスペースは問題になりませんが、TABCR、またはLFなどの文字はスペースとして表示され、LTRIMまたはRTRIMであり、問​​題になります。

たとえば、次を試してください。

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を使用してデータをクリーンアップします。


コメントごとに、 REPLACEcastの一部として使用できます。

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

これが頻繁に発生するものである場合は、データをクリーンアップし、入力前にCRLFを削除するようにテーブルの設定方法を変更することをお勧めします。

19
Jeff Ogata

変換機能を使用できます:

Select convert(int,[Column1])
10
Ali Rasouli

それはあなたがそれをする方法です、それはエラーを投げていますか?変換しようとしている値は変換可能であると確信していますか?明らかな理由により、abc123 int。

[〜#〜] update [〜#〜]

あなたのコメントに基づいて、変換しようとしている値に含まれるスペースを削除します。

2
Abe Miessler

これは、アルファ文字またはNULL値がない限り、INTに変換する正しい方法です。

NULL値がある場合は、使用します

ISNULL(column1, 0)
1
Eric

SQLには2つのタイプの変換メソッドがあります。

CASTとCONVERTには同様の機能があります。 CONVERTはSQL Serverに固有のものであり、日付と時刻の値、小数、通貨記号を変換する際の柔軟性が大幅に向上します。 CASTは、2つの関数のANSI標準です。

変換を使用

Select convert(int,[Column1])

キャストを使用

Select cast([Column1] as int)
0
Manish Vadher

以下のコマンドで試してみると、すべての値がINTに尋ねられます

isnumeric(YourColumn + '.0e0')= 1の場合に大文字と小文字を選択し、次にcast(YourColumn as int)またはNULL end/* case */YourTableから選択

0
Shantanu

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

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