1. ホーム
  2. sql

[解決済み] tSQL - varchar から数値への変換は整数以外ではうまくいきません。

2022-03-08 06:32:17

質問

数字が入ったテーブルを varchar(255) フィールドがあります。これらはすべて1より大きく、小数点以下が複数あります。これらを整数に変換したいのですが、どうすればよいでしょうか?私が参照したすべてのウェブサイトによると、以下のとおりです。 StackOverflowのこの1つ のどちらかで動作するはずです。

SELECT CAST(VarcharCol AS INT) FROM MyTable

SELECT CONVERT(INT, VarcharCol) FROM MyTable

これらは両方とも、あらゆる種類の数値に対して機能しますが integer - に変換することができますね。 float , decimal などに変換するのは問題ありませんが integer は、次のようなエラーが発生します。

Conversion failed when converting the varchar value '7082.7758172' 
to data type int.

データ型に変換することで問題を回避しています。 Decimal(6,0) で、これは問題なく動作します。しかし、私の勉強のために、どなたか、なぜデータ型 int (または integer がエラーになるのですか?ありがとうございます。

解決方法は?

を変換する varchar の値を int は、データの損失を防ぐため、値に小数点が含まれる場合は失敗します。

に変換すると decimal または float の値に変換し、その後 int であれば、変換はうまくいきます。

以下のいずれの例でも、7082が返されます。

SELECT CONVERT(int, CONVERT(decimal(12,7), '7082.7758172'));
SELECT CAST(CAST('7082.7758172' as float) as int);

に変換することに注意してください。 float の値は、まれに精度が落ちることがあります。 私なら decimal を指定する必要があります。 varchar のデータを変換することができます。