2013-07-18 6 views
5

私は0.123のフィールド値のproductlengthを持っています。これはビューからのもので、データ型はvarcharです。mssqlはvarcharをfloatに変換します

数値比較を実行するには、浮動小数点数または数値に変換する必要があります。

と cast(productlength as float)は両方とも機能しません。

error varchar cant be converted to floatまたはそれに類するものです。

私がvarcharを読み込んだのは、単に数値文字列に変換できないのですか?

これに関する巧妙な方法はありますか?

+0

を参照してください。その変数には余分な文字はありませんか? –

答えて

10

varcharsを浮動小数点に変換することができます。これは、表現した方法で行うことができます。あなたのvarcharは数値であってはなりません。そこには何か他のものがなければなりません。 IsNumericを使用してテストすることができます。上記

declare @thing varchar(100) 

select @thing = '122.332' 

--This returns 1 since it is numeric. 
select isnumeric(@thing) 

--This converts just fine. 
select convert(float,@thing) 

select @thing = '122.332.' 

--This returns 0 since it is not numeric. 
select isnumeric(@thing) 

--This convert throws. 
select convert(float,@thing) 
+0

'ISNUMERIC'はいくつかの[面白い振る舞い]を持つことができることに注意してください(http://stackoverflow.com/questions/4522056/how-to-determine-the-field-value-which-can-not-convert-to- decimal-float-int-i/4522185#4522185)。 – Stainy

-1
DECLARE @INPUT VARCHAR(5) = '0.12',@INPUT_1 VARCHAR(5)='0.12x'; 
select CONVERT(float, @INPUT) YOUR_QUERY , 
case when isnumeric(@INPUT_1)=1 THEN CONVERT(float, @INPUT_1) ELSE 0 END AS YOUR_QUERY_ANSWERED 

文句を言わないINPUT_1 @として

DECLARE @INPUT VARCHAR(5) = '0.12',@INPUT_1 VARCHAR(5)='0.12x'; 
select CONVERT(float, @INPUT) YOUR_QUERY , 
case when isnumeric(@INPUT_1)=1 THEN CONVERT(float, @INPUT_1) ELSE **@INPUT_1** END AS YOUR_QUERY_ANSWERED 

を働くが、クエリを下回る値

を返します実際にそれにvarchar型があります。これは参照してください。

したがって、出力列にはvarcharが必要です。

関連する問題