Por qué SELECT SUM() me devuelve valores de tipo character?

84 views
Skip to first unread message

Ultraton500

unread,
Dec 7, 2017, 4:24:45 AM12/7/17
to Comunidad de Visual Foxpro en Español
Buen día,
                 necesito que alguien me ayude a entender por qué al hacer "SELECT campo1 FROM..." (siendo "campo1" de tipo smallint o integer) obtengo valores de tipo numérico tal como es de esperar, pero al hacer "SELECT SUM(campo1) FROM..." obtengo valores de tipo character.
Esto  pasa solo en algunos campos, es decir, en la misma tabla hay otros campos que también son de tipo smallint o integer pero al hacer "SELECT SUM(campo2) FROM..." obtengo valores de tipo numérico. Sinceramente no entiendo.
Estoy usando Firebird 2.5.

Desde ya agradezco sus comentarios.

Saludos cordiales,
Javier.

ZeRoberto

unread,
Dec 7, 2017, 5:10:16 AM12/7/17
to publicesvfoxpro
De repente son LongInt cuando sucede eso te llega en cadena? en MySql hay una opcion en la misma cadena de conexion para que se conviertan en Int, en FireBird no se como sera

Saludos

Gregori Arjona Toledo

unread,
Dec 7, 2017, 5:35:37 AM12/7/17
to Comunidad de Visual Foxpro en Español
Buenos dias.

Esto ocurre porque, cualquier resultado de un calculo sum() count() ,etc. firebird lo convierte a bigint, pero foxpro no tiene este tipo de dato y el controlador odbc lo converte automaticament a strig.

Lo que debes hacer es hacer un cast antes de devolver el valor:

SELECT cast(SUM(campo1) as integer) FROM...


Ultraton500

unread,
Dec 7, 2017, 10:36:56 AM12/7/17
to Comunidad de Visual Foxpro en Español
ZeRoberto y Gregori, gracias por responder.
Tal como me indican puedo convertir el resultado al tipo deseado pero me quedo sin entender por qué pasa lo siguiente.

Los campos "hsteoricas" y "cantmarcas" son ambos de tipo INTEGER e idéntica configuración pero en el resultado de esta consulta

SELECT SUM(hsteoricas) AS hsteoricas,SUM(cantmarcas) AS cantmarcas,empleado FROM asistencias GROUP BY empleado

los campos devueltos "hsteoricas" y "cantmarcas" son de tipo numeric y character respectivamente. No puedo entender por qué la misma operación sobre el mismo tipo de dato devuelve valores de tipos diferentes.

Saludos cordiales,
Javier.

ZeRoberto

unread,
Dec 7, 2017, 1:42:27 PM12/7/17
to publicesvfoxpro
Supongo que si sumas dos columnas Int tendria como resultado una columna LongInt al margen que los datos de tus columnas no pasen los 100 por cada registro

Saludos

Ultraton500

unread,
Dec 7, 2017, 5:05:36 PM12/7/17
to Comunidad de Visual Foxpro en Español
La cosa ZeRoberto es que la misma regla podría aplicarse para ambos campos pero eso no sucede. Como sea, le cargo manualmente los mismos valores a ambas columnas de la tabla y obtengo un cursor con los mismos resultados pero de distinto tipo, eso es lo que no puedo entender.
No solo me pasa con campos INTEGER sino también con campos SMALLINT.

Como dicen acá en Argentina... es cosa'e mandinga. Jaja!!    (mandinga viene a ser el diablo, no el famoso "negro mandinga").

Saludos,
Javier.
Reply all
Reply to author
Forward
0 new messages