Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Sumar horas

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Sumar horas Responder citando

Tengo una tabla Paradox7 con un campo TTime en el que se van guardando datos en formato "xx:xx:xx". Necesitaría con una sentencia SQL sumar todos los valores pero no lo consigo Confused .
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Pudes utilizar la funcion DecodeTime;
Código:


Word  ho, mi, seg;
DecodeTime( <Campo tiempo de la Tabla>, ho, mi, seg);


recorrerla desde el principio, y posterioremente sumar los campos, claro, cuando la suma pase de 60, recuerda aumnetar los minutos y los segundos...
para tener las funciones correctas dentro de la hora.
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Gracias César tu código es una solución muy válida Smile , pero me habría gustado hacerlo integramente en SQL. Saludos.
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

si, lo que pasa, es que SQL, no tiene tanta potencia para el manejo de datos, tipo Time o Date..


saludos..
_________________
Cool
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Primero habría que hacer varias consideraciones, y es que un campo Time SQL sirve para almacenar la hora del día, no para almacenar un campo tiempo al estilo contador, es decir, d:h:m:s:ms etc, la mayoria de SGBD soportan la función agregada SUM que realiza una suma de los campos, pero un campo TIME como dije antes no ofrece lo que creo que se quiere buscar.

Luego algunos gestores proporcionan funcionalidad para hacer este tipo de cosas, bien con funciones propias que implementan en SQL propio, es decir que no pertenece ni a SQL92 ni a SQL99 o bien como funciones que se puede llamar y que se programan externamente, por ejemplo Interbase/Firebird tiene las udf (Funciones definidas por el usuario) y que se pueden llamar desde las propias sentencias SQL.

Quizás en tu caso lo más conveniente sea en vez de usar un campo Time, sea usar un campo float o integer y utilizar alguna función de tiempo del C standard que devuelve un número indicando el número de ms desde cierta fecha, entonces con ese campo, si podrías hacer sumas en el propio SQL, pero claro cada vez que leas o escribas ese valor deberás convertirlo al tipo Time adecuado si utilizas cualquier componente visual o bien usar de nuevo UDFs o funciones propias de tu SGBD si es que las soporta.

Pero creo que el problema no está en que SQL no soporte sumar campos Time, sino que estas demandando algo para lo que el campo Time no había sido pensado (a mi entender claro), por ejemplo lo que te comentar César de DecodeTime y separar horas, minutos y segundos, forma parte de las udfs que acompañan a Interbase/Firebird luego puedes usarlas desde el propio SQL.

Ciao y suerte.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Estupendo XyVy, me has aclarado bastante la duda. Visto lo visto al final lo ke he hecho y ya que la tabla no va a contener muchos datos ha sido recorrerla con un for e ir cogiendo los valores del campo Time dividirlo con la función substring convertir las partes a enteros sumarlas y con los resultados formar un nuevo time y así obtengo el valor total que me interesa.
Gracias a todos Wink
_________________
¡ADELANTE CON ESTE SUPER FORO!
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Mira para que te hagas una idea (imagino que probablemente ya lo sepas), imaginate que tienes una tabla y hay un campo con un tiempo que son ms o segundos, ok ? para sumar toda la tabla entera haciendolo con SQL podrías hacer:

Código:

SELECT SUM(tiempo)
FROM nombre_tabla


Si por ejemplo quisieras sumar todos los tiempos pero con alguna restricción pues:
Código:

SELECT SUM(tiempo)
FROM nombre_tabla
WHERE restricciones a tener en cuenta


También puedes utilizar GROUP BY para agrupar por ciertos campos, etc, el problema es que SUM como dije antes no se puede utilizar para el fín que tu quieres con un campo TIME.

Lo que si puedes hacer es como dije intentar almacenar este valor en segundos o milisegundos en un campo INTEGER por ejemplo, y usar la función agregada SUM, una vez ejecutada la sentencia y leido su valor resultado del Query, solo te quedaría convertir el total de segundos, en días, horas, minutos, y segundos, que bien podrías hacerlo comodamente a mano o bien usando alguna función.

Ciao.
_________________
OJO!! Ya tenemos subforo de Bases de Datos!!
Gracias a los admins.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

HOLA:

Deberias utilizar el cast para fechas en base de datos,
Ejemplillo (de memoria)

select extract (Year from fecha), extract (hour from fecha) as hora
from tabla ....


Solo que no puedes hacer un sum ( extract (hour from fecha)), deberias
de creater una vista, extrayendo las horas, seg,etc y a partir de hay hacer tus calculo.

by.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.