2013-07-18 19 views
5

Mam wartość produktu o wartości pola 0.123. To jest z widoku i ma typ danych varchar.mssql przekonwertować varchar na float

Konieczne jest przekonwertowanie go na wartość zmiennoprzecinkową lub liczbową, tak aby wykonać porównania matematyczne.

Konwertuj (float, productlength) i rzutowanie (iloczyn długości jako zmiennoprzecinkowy) nie działają.

error varchar cant be converted to float lub coś w tym stylu.

Z tego, co przeczytałem, varchar nie może po prostu zostać przekonwertowany na ciąg numeryczny?

Jakieś sprytne sposoby obejścia tego?

+0

'wybrać CONVERT (float '0,123')' prace. Czy nie masz żadnych dodatkowych znaków w tej zmiennej? –

Odpowiedz

10

Możesz konwertować varchary na pływaki, i możesz to zrobić w sposób, który wyraziłeś. Twój varchar nie może być wartością liczbową. Musi być w tym coś jeszcze. Możesz użyć IsNumeric, aby go przetestować. Zobacz to:

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

Pamiętaj, że 'ISNUMERIC' może mieć pewne [zabawne zachowanie] (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 

powróci powyżej wartości

jednak poniżej zapytania przyzwyczajenie praca

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 

jako @ INPUT_1 faktycznie ma varchar w nim.

Tak więc kolumna wyjściowa musi zawierać varchar.

Powiązane problemy