Saltar al contenido

La conversión falló al convertir el valor varchar ‘simple,’ al tipo de datos int

Necesitamos tu apoyo para compartir nuestros ensayos acerca de las ciencias informáticas.

Solución:

Para evitar tal error, puede usar CASE + ISNUMERIC para manejar escenarios cuando no puede convertir a int.

Cambiar

CONVERT(INT, CONVERT(VARCHAR(12), a.value))

Para

CONVERT(INT,
        CASE
        WHEN IsNumeric(CONVERT(VARCHAR(12), a.value)) = 1 THEN CONVERT(VARCHAR(12),a.value)
        ELSE 0 END) 

Básicamente, esto dice que si no puede convertirme a int, asigne un valor de 0 (en mi ejemplo)

Alternativamente, puede consultar este artículo sobre la creación de una función personalizada que verificará si a.value es el número: http://www.tek-tips.com/faqs.cfm?fid=6423

Dado que solo estás convirtiendo a ints para luego realizar una comparación, simplemente cambiaría la definición de la tabla para usar varchar además:

Create table #myTempTable
(
num varchar(12)
)
insert into #myTempTable (num) values (1),(2),(3),(4),(5)

y eliminar todos los intentos CONVERTs del resto de la consulta.

 SELECT a.name, a.value AS value, COUNT(*) AS pocet   
 FROM 
 (SELECT item.name, value.value 
  FROM mdl_feedback AS feedback 
  INNER JOIN mdl_feedback_item AS item 
       ON feedback.id = item.feedback
  INNER JOIN mdl_feedback_value AS value 
       ON item.id = value.item 
   WHERE item.typ = 'multichoicerated' AND item.feedback IN (43)
 ) AS a 
 INNER JOIN #myTempTable 
     on a.value = #myTempTable.num
 GROUP BY a.name, a.value ORDER BY a.name

Si está convirtiendo un varchar a int, asegúrese de no tener decimales.

Por ejemplo, si está convirtiendo un campo varchar con valor (12345.0) en un número entero, obtendrá este error de conversión. En mi caso, tenía todos mis campos con .0 como terminación, así que usé la siguiente declaración para solucionar el problema globalmente.

CONVERT(int, replace(FIELD_NAME,'.0',''))

Si piensas que ha resultado de provecho este post, te agradeceríamos que lo compartas con otros juniors de esta forma nos ayudas a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *