![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
#1
|
||||
|
||||
Sumar tiempos
Buenas tardes. A ver si me sé explicar. Tengo esta tabla en FB 2.5:
Creo que es bastante evidente que se trata de una BB.DD. de discos. Necesito hacer un query que me sume la duración de las pistas; algo así: Pero al porbar en SQL Manager me da este error: Cita:
Ya sé que podría sacar los tres datos (hora, minutos y segundos) por separado: pero al hacer luego un EncodeTime es muy fácil que dé error porque, por ejemplo, una de las sumas saldría algo así: Cita:
|
#2
|
||||
|
||||
Ahi tienes que usar es funciones de fecha, no de numero.
__________________
El malabarista. |
#3
|
||||
|
||||
¿Seguro que es dialecto 3?
¿Has mirado los datos del campo tiempo con isql? Es para ver el valor real que tiene guardado, sin máscaras.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#4
|
||||
|
||||
Yo optaría por guardar internamente los tiempos en segundos (en BD).
Luego a la hora de pintarlos sólo tienes que pasarlos a horas, minutos y segundos. Es una cuestión de visualización. De esa forma puedes usar la funciones tipo SUM sin problemas.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#5
|
||||
|
||||
Efectivamente, pero es que en algún sitio había visto que se podía usar el SUM sobre valores de tiempo.
La definición de la BB.DD. está puesta así: Así que sí, es dialecto 3. Cita:
Código:
int Hora, Minuto, Segundo; Query->Close(); Query->SQL->Text = "SELECT Disco, SUM(EXTRACT(HOUR FROM Tiempo)) Hora, SUM(EXTRACT(MINUTE FROM Tiempo)) Minuto, SUM(EXTRACT(SECOND FROM Tiempo)) Segundo FROM Pistas GROUP BY Disco ORDER BY Disco"; Query->Open(); for (; !Query->Eof; Query->Next()) { Segundo = Query->FieldByName("Segundo")->AsInteger % 60; Minuto = Query->FieldByName("Minuto")->AsInteger + (int)Query->FieldByName("Segundo")->AsInteger / 60; Hora = Query->FieldByName("Hora")->AsInteger + (int)Query->FieldByName("Minuto")->AsInteger / 60; Minuto = Minuto % 60; [...] } |
#6
|
||||
|
||||
Cierto, estaba pensando al revés, con dialecto 3 no puedes sumar.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#7
|
||||
|
||||
Cita:
Calculos de fechas se hacen con funciones de fecha. Siempre.
__________________
El malabarista. |
#8
|
||||
|
||||
La verdad es que yo me he quedado "pillado" porque no me ha funcionado las pruebas que he hecho, sin embargo:
Cita:
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
#9
|
||||
|
||||
Cita:
El registro original en ese campo tiene guardado el valor 0:40:01, pero el query no devuelve nada; por lo que se ve sobre campos de tiempo no puede hacerse. |
#10
|
||||
|
||||
Por lo visto se puede sumar/restar valores a fechas y horas, y se puede restar fechas y devuelve los días entre ellas, pero lo que no se puede, por lo visto, es sumar fechas ni tampoco horas.
Yo habría jurado que se podía.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
restar tiempos | Nostradonuts | Varios | 2 | 15-04-2011 20:09:48 |
Calculo de tiempos | jafera | Varios | 9 | 04-11-2010 12:08:47 |
Sumar Tiempos en una Select | Salomon | Firebird e Interbase | 4 | 09-12-2004 18:07:05 |
Sumar tiempos | Aztaroth | SQL | 1 | 06-05-2004 19:36:37 |
Sumar tiempos con SUM | Ruben_Cu | SQL | 4 | 03-11-2003 03:10:49 |
![]() |
|