Tengo un valor de campo productlength de 0.123. Esto es de una vista y tiene un tipo de datos varchar.
Necesito convertirlo a un valor flotante o numérico para realizar comparaciones matemáticas.
convert(float,longitudproducto) y cast(longitudproducto como float) no funcionan.
Error: "varchar no se puede convertir a float" o algo parecido.
Por lo que he leído varchar simplemente no se puede convertir a una cadena numérica?
¿Hay alguna forma inteligente de evitarlo?
Puedes convertir varchars a floats, y puedes hacerlo de la forma que has expresado. Tu varchar no debe ser un valor numérico. Debe contener algo más. Puedes usar IsNumeric para comprobarlo. Vea esto:
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)
Utilice
Try_convert(float,[Value])
Ver 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
arriba devolverá valores
sin embargo a continuación consulta no funciona
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
como @INPUT_1 en realidad tiene varchar en ella.
Así que su columna de salida debe tener un varchar en ella.