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?
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)
Verwenden Sie
Try_convert(float,[Value])
Siehe https://raresql.com/2013/04/26/sql-server-how-to-convert-varchar-to-float/
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.