J'ai une longueur de produit de valeur de champ de 0.123. Ceci provient d'une vue et a un type de données de varchar.
J'ai besoin de le convertir en float ou en valeur numérique afin d'effectuer des comparaisons mathématiques.
convert (float, productlength) et cast (longueur du produit comme float) ne fonctionnent pas.
error varchar cant be converted to float
ou quelque chose liek.
De ce que j'ai lu varchar ne peut tout simplement pas être converti en une string numérique?
Des moyens astucieux autour de cela?
Vous pouvez convertir des varchar en floats, et vous pouvez le faire de la manière que vous avez exprimée. Votre varchar ne doit pas être une valeur numérique. Il doit y avoir autre chose dedans. Vous pouvez utiliser IsNumeric pour le tester. Regarde ça:
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)
Utilisation
Try_convert(float,[Value])
Voir 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
ci-dessus returnnera des valeurs
Cependant, la requête ci-dessous ne fonctionnera pas
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
comme @ INPUT_1 a effectivement varchar dedans.
Donc, votre colonne de sortie doit avoir un varchar dedans.