2016-03-25 8 views
0

5Mレコードを含むSASデータセットからのデータがロードされたステージングテーブルがあります。すべての列はvarcharです。いくつかの列をdecimal(32,10)に変換しようとしています。しかし、エラーが発生します。私はキャストしようとしましたが、私は変換しようとしましたが、データを10進数の前後に分割しました - 同じ結果。VarcharからDecimal SQL Serverへの変換時のエラー

私は列のIsNumericフラグを見て、データが数値であることを意味する0レコード<を持っています。

case 
    when wtd_count = '.' THEN NULL 
    when wtd_count = '' THEN NULL 
    else convert(decimal(32, 10), wtd_count) 
end 

エラー:

Msg 8114, Level 16, State 5, Line 99
Error converting data type varchar to numeric.

だから、私は小数にデータを変換するために行うことができます他に何思ったんだけど?何か案が? ご協力いただければ幸いです。

+0

それは10進数でなければなりませんか?ヴァル、ロングはいかがですか?値を数値にしたいと思っていますか? – Leptonator

+0

明らかに、そのテーブルに10進数に変換できない値が少なくとも1つあります。 2012年以降の場合は、TRY_PARSE(https://msdn.microsoft.com/en-us/library/hh213126.aspx)をご覧ください。 –

+0

ご回答ありがとうございます@Sean Lange。 SQL Server 11.0.x以降ではTry_Parseを使用できません。 – Bee

答えて

0

は、SQL Server 2012年であり、上記try_parse使用するか、

0

ISNUMERICは、あなたがやっている何のために信頼できるものではありませんtry_convertしよう。それは有効なものとして通貨記号やコンマなどの値をフラグします。

いくつかの非数値データが存在する可能性が高いようです。 TRY_CONVERTまたはTRY_PARSEはあなたの友人です。 FYIとして、SQL Serverバージョン11.0.xはSQL Server 2012ですので、これらを使用できるはずです。

また、数字の作品に変換するのは小数点ではないとは思えません。私はこれらの2つのデータ型の実際の実装が異なっていることを示唆する情報は見つけられません。

私はあなたのデータが欲しいと思っているかどうかを確認するために、データをさらに深く分析します。

0

あなたのケースステートメントを読んだ後、私はあなたが昏睡区切りの値を持っていると思います。私はかなりあなたが使用する必要があると確信しています:CONVERT(DECIMAL(32,10),REPLACE(wtd_count,',','.'))

関連する問題