2017-11-15 18 views
0

に小数点を扱う私はラウンド()の使用方法を知っていて、それが147.26719を返しROUND()varchar型

select round(147.26719,5,1) 

のために正常に動作します。私はそれが147.26718を返し非常に奇妙なこの

select round('147.26719',5,1) 

のようにvarchar型で小数に対処するためにround()を使用した場合

は現在、私は、すべての列が varcharあるので、txtファイルからインポートしたテーブルに取り組んでいます。

私は現在、それは

select round(cast('147.26719', decimal(11,6)),5,1) 

として正しく実行しますが、これはなぜ起こるか誰が私に説明できますか?私は暗黙のうちにvarcharを10進数に変換するときに何かだと信じていますが、理由を知らないだけです。デフォルトでは、事前

答えて

2

おかげで、round()のための文字列の暗黙的な変換はfloat、ない小数にあります。浮動小数点数は不正確で、見た目からちょっと離れているかもしれませんが、問題には十分です。

あなたの解は正しいもので、10進数にキャストされます。 `;

select round('123.3', 1) as col 
into x; 

select * 
from information_schema.columns 
where table_name = 'x'; 
+0

あるいは、' SQL_Variant_Property(ラウンド( '123.3'、1)、 'BaseType')を選択:

あなたは容易ようなコードを使用することによって、これを見ることができます。 – HABO

+0

ありがとう!それは説明する – Olsen