mssql convert varchar to float

Ich habe einen Feldwert productlength von 0.123. Dieser stammt aus einer Ansicht und hat den Datentyp varchar.

Ich muss ihn in einen Float- oder numerischen Wert umwandeln, um mathematische Vergleiche durchführen zu können.

konvertieren(float,produktlaenge) und cast(productlength as float) funktionieren beide nicht.

Fehler "varchar kann nicht in float konvertiert werden" oder so ähnlich.

Nach dem, was ich gelesen habe, kann varchar einfach nicht in eine numerische Zeichenfolge konvertiert werden?

Gibt es irgendwelche cleveren Möglichkeiten, dies zu umgehen?

Lösung

Sie können varchars in Floats konvertieren, und zwar auf die von Ihnen beschriebene Weise. Ihr varchar darf kein numerischer Wert sein. Es muss etwas anderes enthalten sein. Sie können IsNumeric verwenden, um dies zu testen. Siehe dies:

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)
Kommentare (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

wird folgende Werte zurückgeben

Die folgende Abfrage wird jedoch nicht funktionieren

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

da @INPUT_1 tatsächlich varchar enthält.

Ihre Ausgabespalte muss also ein varchar enthalten.

Kommentare (0)