SQL - Error de conversión al convertir el valor varchar '*' al tipo de datos int.

   
Vista:

Error de conversión al convertir el valor varchar '*' al tipo de datos int.

Publicado por Ger gersk8gt@gmail.com (2 intervenciones) el 06/05/2014 20:15:51
Buen día me podrían ayudar.
tengo un problema con un error de conversión de valor varchar a int

tengo en una vista un datediff de la que me da un total en minutos, pero yo necesito el valor en horas y minutos.
los que hice fue esto
1
2
3
4
5
select
                (convert(varchar,convert(int,MinutosVista)/60)) AS HORAS,
		(((MinutosVista))-((convert(varchar,convert(int,MinutosVista)/60))*60)) AS MINUTOS
 
from vista

en este caso si me despliega los campos, pero cuando quiero sacar los dos cálculos en una misa columna me sale el error.
1
2
3
4
5
select
		(convert(varchar,convert(int,MinutosVista)/60)) AS HORAS,
		(((MinutosVista))-((convert(varchar,convert(int,MinutosVista)/60))*60)) AS MINUTOS,
		(convert(varchar,convert(int,MinutosVista)/60) + ' HRS ' + (((MinutosVista)-  (convert(varchar,convert(int,MinutosVista))/60))*60) + ' MIN') AS TIEMPO_TOTAL
From vista

el error es Error de conversión al convertir el valor varchar ' MIN' al tipo de datos int.

Les agradeceria que me ayudaran.
Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Error de conversión al convertir el valor varchar

Publicado por leonardo_josue (877 intervenciones) el 07/05/2014 18:38:55
Hola Ger:

El problema es que estás sumando peras con manzanas y esperando que el resultado sean duraznos :S. El error es bastante claro y es que al utilizar el simbolo de suma (+) mezclando enteros con cadenas, el motor de BD's no sabe si hacer una suma o una concatenación... vayamos por partes.

En primer lugar no nos mencionas con qué motor de BD's estás trabajando... gran error, pues aunque todos los DBMS tienen sintaxis similar, también tienen diferencias importantes.

Tal como mencioné al principio el error que tienes es que estás mezclando enteros y cadenas con el operador de suma... algunos DMBS's como por ejemplo MySQL, realizan conversiones implícitas al utilizar el operador de suma... así por ejemplo, si tratas de sumar 5 + '6' (el primero como número y el segundo como cadena), el motor trata de convertir la cadena a número para realizar la suma, por lo tanto, el resultado es 11:

1
2
3
4
5
6
7
mysql> select 5 + '6';
+---------+
| 5 + '6' |
+---------+
|      11 |
+---------+
1 row in set (0.04 sec)

En este caso no hay problema, pues la cadena '6' puede convertirse a numero, lo mismo pasa con otras operaciones matemáticas... si tu pones algo como esto:

1
2
3
4
5
6
7
mysql> select '10' / 2;
+----------+
| '10' / 2 |
+----------+
|        5 |
+----------+
1 row in set (0.00 sec)

Es decir, 'divides' una cadena entre un número, el resultado es un número, no un VARCHAR... ¿pero qué pasa cuando quieres hacer una suma entre un numero y una cadena que NO ES NÚMERO? pasa que puedes tener el error que te aparece.

Tratando de analizar tu consulta llego a dos conclusiones:

1. Haces un uso EXCESIVO E INÚTIL de paréntesis...

1
((MinutosVista)) es exactamente lo mismo que pones simplemente MinutosVista

Te recuerdo que los paréntesis sirven para AGRUPAR OPERACIONES y/o PARA INDICAR EL ORDEN DE EJECUCIÓN DE LAS OPERACIONES. En este caso no sirve para ninguno de los dos casos. No vale decir que esta consulta la generó un asistente, que puede ser el caso... los asistentes para generar consultas sirven para tratar de ayudar a hacer una consulta, pero si algo está mal hecho, entonces tienes que corregirlo.

2. Estás haciendo una mazcla entre datos numéricos y cadenas bastante grave. Por ejemplo, ¿De qué tipo es tu campo MinutosVista? si me dices que es de tipo NUMERICO, entonces conversiones como esta

1
convert(int,MinutosVista)

ES COMPLETAMENTE INUTIL.

Si me dices que es VARCHAR, entonces no puedes hacer restas (como es el caso) entre una cadena y un numero. el resultado puede ser incierto:

1
(((MinutosVista)-  (convert ...

¿Qué tienes que hacer? pues asegurarte de utilizar correctamente los operadores de matemáticos SOLO ENTRE NUMEROS, y si quieres concatenar cadenas ENTONCES ASEGURARTE QUE SEAN CADENAS.

Saludos.
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Error de conversión al convertir el valor varchar

Publicado por Ger (2 intervenciones) el 12/05/2014 16:37:14
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Error de conversión al convertir el valor varchar

Publicado por Janneth (1 intervención) el 20/11/2014 23:35:10
Hola,

Tengo un problema con un campo que es de tipo varchar y que puede contener una operacion matematica. Ejemplo:

La tabla tiene los campo Columna y formula el cual es un varchar(255). Necesito una funcion que me retorne el campo de resultado que es una operación matemática

Columna Formula Resultado
1 (5 * 4) / 10 2
2 (5 + 2) * 3 21


Gracias por su colaboración
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar