 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Jue 26 Feb, 2004 2:30 pm Asunto: Sumar horas |
|
|
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 . _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Jue 26 Feb, 2004 4:15 pm Asunto: |
|
|
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. _________________
 |
|
| Volver arriba |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Jue 26 Feb, 2004 5:18 pm Asunto: |
|
|
Gracias César tu código es una solución muy válida , pero me habría gustado hacerlo integramente en SQL. Saludos. _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
Cesar C. Salazar Gonzalez Master


Registrado: 01 Oct 2002Mensajes: 2155Ubicación: San Cristóbal de Las Casas, Chiapas
|
Publicado: Vie 27 Feb, 2004 8:21 am Asunto: |
|
|
si, lo que pasa, es que SQL, no tiene tanta potencia para el manejo de datos, tipo Time o Date..
saludos.. _________________
 |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Vie 27 Feb, 2004 9:20 am Asunto: |
|
|
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 |
|
 |
Tugui Master


Registrado: 09 Nov 2002Mensajes: 663
|
Publicado: Vie 27 Feb, 2004 10:25 am Asunto: |
|
|
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  _________________ ¡ADELANTE CON ESTE SUPER FORO! |
|
| Volver arriba |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Vie 27 Feb, 2004 11:02 am Asunto: |
|
|
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 |
|
 |
TOÑO Master

Registrado: 26 Ago 2002Mensajes: 223Ubicación: Madrid - España -
|
Publicado: Vie 27 Feb, 2004 11:50 am Asunto: |
|
|
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 |
|
 |
|
|
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
|
© 2002–2026 Club Builder · Funciona con phpBB.
|