Buscar este blog

viernes, 29 de julio de 2011

Evitar Errores Convirtiendo Datos Varchar a Numericos "Error converting data type varchar to float"

Amigos,

Un error tan comun como evitable cuando se convierten datos de tipo varchar a numerico es aquel que "de la nada" aparece para darnos dolores de cabeza, bajo este texto

"Error converting data type varchar to float"

Por que digo "de la nada"? Pues el error aparece cuando comenzamos a trabajar con strings que representan numeros que exceden las tres cifras enteras. Es decir con numeros superiores al 999

Supongamos que las siguientes sentencias, (tomada de un script), funcionan correctamente

-- Escenario 1, todo ok --
declare
@costminute varchar(20),
@resultado float

set @costminute = '999'

select @resultado=convert(float, @costminute)/5

... hasta que un dia... el valor de @costminute supera las tres cifras y empezamos a recibir el maldito error...

Cual seria la forma de solucionarlo?

Sencillo, reemplazando la coma del separador de miles, evitando que de este modo se produzca el error.

-- Escenario 2, todo ok solo aplicando el Replace ;) --
declare
@costminute varchar(20),
@resultado float

set @costminute = '1,200'

select @resultado=convert(float, replace(@costminute,',',''))/5

Sencillo amigos, nada de comas cuando trabajamos con este tipo de conversiones

3 comentarios:

  1. hola un poco viejo el post pero a penas me topé con este error, una pregunta, necesito puntos decimales en mi aplicacion,no comas, como lo hago?

    ResponderEliminar
  2. hola gustavo

    tengo el siguiente error cuando intento insertar datos en una tabla sl server: Error converting data type nvarchar to numeric,

    necesito me ayudes a solucionar este problemita por favor..

    ResponderEliminar
  3. Error: Array ( [0] => Array ( [0] => 42000 [SQLSTATE] => 42000 [1] => 8114 [code] => 8114 [2] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Error al convertir el tipo de datos varchar a int. [message] => [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Error al convertir el tipo de datos varchar a int. ) )

    ResponderEliminar