Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 17-02-2011
Joe_Balda Joe_Balda is offline
Miembro
 
Registrado: ago 2010
Posts: 23
Poder: 0
Joe_Balda Va por buen camino
Extraer parte entera de una division en sql firebird , falla

Hola foro,

Tengo la siguiente consulta, necesito convertir el valor de un campo entero en el cual estoy almacenando minutos al formato horas y minutos.
Para esto hago lo siguiente :

Código SQL [-]
Select TIEMPO,
       cast((TIEMPO/60) as integer) as HORA ,
       Mod(T_ESTIMADO, 60) as MINUTOS
from RESERVA

si TIEMPO = 90 el resultado esperado en hora seria 1 y el de minutos seria 30

Ahora cuando efectuo el

Código SQL [-]
cast((TIEMPO/60) as integer) as HORA

Si tiempo = 90 el resultado me da 2 cuando deberia ser 1
90/60 = 1,5 y aparentemente me redondea a 2
a que se debe esto?
Responder Con Cita
  #2  
Antiguo 17-02-2011
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.021
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Pero de qué tipo son esos campos?
Responder Con Cita
  #3  
Antiguo 17-02-2011
Joe_Balda Joe_Balda is offline
Miembro
 
Registrado: ago 2010
Posts: 23
Poder: 0
Joe_Balda Va por buen camino
Código SQL [-]
cast((TIEMPO/60) as integer) as HORA

El campo 'TIEMPO' es INTEGER, en el caso que su valor sea 90 el Cast me da como resultado 2 cuando deberia ser 1.
Responder Con Cita
  #4  
Antiguo 17-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Aparentemente, el problema no te lo está ocasionando Firebird. Hice dos pruebas diferentes con el valor 90 y en ambos casos el resultado es 1.

Desde el IB Mananger
Código SQL [-]
SELECT CAST((90/60) AS INTEGER) AS HORA FROM RDB$DATABASE
Resultado: 1.

Desde Delphi:
Código Delphi [-]
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Add('SELECT CAST((CIUDAD_ID/60) AS INTEGER) AS HORA FROM CIUDADES');
  IBQuery1.SQL.Add('WHERE CIUDAD_ID = 90');
  IBQuery1.Open;
  ShowMessage(IBQuery1.FieldByName('HORA').AsString);
Resultado: 1.

En los dos casos me aseguré que el operador 'TIEMPO' tuviera el valor 90. El campo CIUDAD_ID es de tipo INTEGER.
Realmente no sé por que te arroja ese resultado...

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #5  
Antiguo 17-02-2011
Joe_Balda Joe_Balda is offline
Miembro
 
Registrado: ago 2010
Posts: 23
Poder: 0
Joe_Balda Va por buen camino
Código SQL [-]
SELECT CAST((90/60) AS INTEGER) AS HORA FROM RDB$DATABASE

Te comento, tiro esa consulta desde IBOConsole o IB Expert y en ambos casos el resultado es 2.

Desde delphi, version 5, con un TQUERY me arroja el mismo resultado.
Segun veo con otros casos aparentemente cuando la parte decimal es igual o mayor que 5 me lo redondea para arriba.

90/60=1,5 me da como entero 2.

Alguna idea de que pueda ser?
Responder Con Cita
  #6  
Antiguo 17-02-2011
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola.

Mirá, la única diferencia que puedo ver ahora que nombras la versión, es que las pruebas las realicé con Delphi 7 y Firebird 2.5., tal vez sea un tema de versiones.

Te convendría poner que versión de Firebird estas usando, quizá alguno que use Delphi 5 y tu versión de Firebird, conozca solución para este caso.
(o al menos pueda reproducir la condición de error )

Un saludo.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Parte entera y decimal joanajj Varios 6 16-01-2008 08:51:09
falla en división mamaro Firebird e Interbase 11 12-02-2007 18:48:44
Parte entera amedina Varios 1 20-08-2005 04:06:04
Como extraer parte entera de una fraccion JODELSA Varios 3 23-05-2003 18:05:26


La franja horaria es GMT +2. Ahora son las 13:02:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi