varchar(255)
フィールドに数値を持つテーブルがあります。これらはすべて1より大きく、小数点以下が複数あります。それらを整数に変換したいと思います。 StackOverflowのこのサイト を含め、私が相談したすべてのWebサイトによると、これらのいずれかが機能するはずです。
_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への変換は失敗します。
最初にFLOATに変換してからINTに変換すると、変換が機能します。
SELECT CAST(CAST('7082.7758172' as float) as int)
返す
7082
実際、数字があるかどうかは関係ありません。 。 (ドット)は、intにキャストする場合は禁止されています。ドットは-論理的に-整数定義の一部にはなれません。
select cast ('7.0' as int)
select cast ('7.' as int)
失敗しますが、両方ともフロートには適しています。
これを試して
declare @v varchar(20)
set @v = 'Number'
select case when isnumeric(@v) = 1 then @v
else @v end
そして
declare @v varchar(20)
set @v = '7082.7758172'
select case when isnumeric(@v) = 1 then @v
else convert(numeric(18,0),@v) end