Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Problema con datos tipo time

Estas en el tema de Problema con datos tipo time en el foro de Mysql en Foros del Web. Hola a todos los compañeros del foro... Lo que sucede es que tengo un problema muy grande..tengo una tabla en la base de datos de ...
  #1 (permalink)  
Antiguo 04/12/2008, 11:35
 
Fecha de Ingreso: diciembre-2008
Mensajes: 4
Antigüedad: 15 años, 4 meses
Puntos: 0
De acuerdo Problema con datos tipo time

Hola a todos los compañeros del foro...

Lo que sucede es que tengo un problema muy grande..tengo una tabla en la base de datos de Mysql y necesito sumar una columna de registros de tipo Time.
...Hasta ese punto todo era perfecto.. y el calculo lo realizaba correctamente....Pero ahora como la tabla tiene demasiados registros el calculo de la fecha no lo alcanza a calcular por el limite que tiene que es de 838:59:59....

Como puedo hacer para calcular los tiempos mayores a este limite...

Espero me ayuden...
  #2 (permalink)  
Antiguo 04/12/2008, 12:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con datos tipo time

Suma los segundos que componen las horas y luego crea un string separando los días de las horas:
SUM(SEC_TO_TIME(Horas))
Y al resultado lo procesas generando un string CONCAT((totalseg DIV 86400), ' Dias ', (totalseg % 86400), ' Hs.').
La segunda parte puedes manejarla directamente en la aplicación.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/12/2008, 15:16
 
Fecha de Ingreso: diciembre-2008
Mensajes: 4
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Problema con datos tipo time

Hola gnzsoloyo, gracias por tu respuesta...

Intente lo que me comentaste, aunque respecto a ello tengo una pregunta....

Porque si por ejemplo totalseg= 2555.000000, el resultado de la consulta da 0 Dias y 2555.000000 Hrs. ??? ......Si el resultado da en segundos, al convertirlo a Horas deberia dar un resultado diferente no??

Por otro lado queria saber si hay un modo de dar el resultado solo en horas, sin tener en cuenta los dias...Ya que lo que necesito es tener el total de horas de n Columna, expresado solo en horas.

Gracias nuevamente por tu ayuda
  #4 (permalink)  
Antiguo 05/12/2008, 04:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con datos tipo time

Si la suma de segundos totales, te da menos de 86.400 segundos, obviamente dará como resultado cero días, porque esa es la cantidad de segundos de un día...
El tema sería realizar esto en una función que te devuelva el string sobre la base de la suma total.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 05/12/2008, 07:32
 
Fecha de Ingreso: diciembre-2008
Mensajes: 4
Antigüedad: 15 años, 4 meses
Puntos: 0
Resuelto problema con datos tipo time

Hola,

A lo que me referia no es a que el resultado me mostrara 0 Dias, sino que las horas tampoco
las estaba calculando ya que si el resultado me arroja 2555.000000 segundos, no es posible que
el resultado sea 2555.000000 Horas...Porque son la misma cantidad??? Me hago entender.

......
Por otro lado gracias por tus respuestas..Ayer estuve intentando y lo resolvi de la siguiente
manera por si a alguien le sirve:

ROUND(sum(time_to_sec(Tiempo)/3600),2) AS TOTAL HORAS
  #6 (permalink)  
Antiguo 05/12/2008, 07:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con datos tipo time

Estás usando incorrectamente las funciones. ROUND() no cumple ninguna funcionalidad cuando debes hacer un cálculo de tiempos (genera decimales que no tienen uso) en los que operas con los restos de división:

- (TotalSegundos DIV 86400 )
Esto te devuelve la cantidad de días completos sobre una sumatoria de segundos.

- (TotalSegundos % 86400)
Esto te devuelve el total de segundos restantes, sacando los que suman los días. Sobre este resto tienes que calcular las horas. Existen dos forma sde manejarlas: a) Las calculas como numeros enteros, b) las representas como HH:mm:ss.
a) En el primer caso es ((TotalSegundos % 86400) DIV 3600), y si quieres los minutos: ((TotalSegundos % 86400) % 3600), y los segundos: (((TotalSegundos % 86400) % 3600) % 60)
b) En el segundo caso es SEC_TO_TIME((TotalSegundos % 86400) ). Como el resto es inferior a 86400, la creación de un TIME dará un valor entre 00:00:00 y 23:59:59
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 05/12/2008, 10:10
 
Fecha de Ingreso: diciembre-2008
Mensajes: 4
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: Problema con datos tipo time

RELOJ DE CUADRANTE ECUATORIAL



Dejame decirte que no estoy utilizando incorrectamente ninguna función. Quiero mostrarte que existe un formato de horas que es el decimal, ya que como puedes apreciar en la imagen anterior el tiempo en el cuadrante ecuatorial esta dividido en cuatro partes, cada una de 15 minutos, lo que completa al dar el giro de 360 grados un total de 1 HORA. (15 Minutos x 4 Cuadrantes = 60 Minutos => 1 Hora)

Por ello al utilizar la función ROUND lo que hago es al resultado, dejarlo solo con dos cifras decimales. Y con la función TIME_TO_SEC calcular la cantidad de segundos que existe en la variable de tiempo especificada. La división de 3600 es para convertir el tiempo en formato de Horas (1 Minuto => 60 segundos; 1 Hora=> 3600 segundos)

Para ilustrarte con un ejemplo sencillo, tenemos :

Select ROUND(sum(time_to_sec('00:15:00')/3600),2)

Resultado: 0.25 => Lo que equivale a 1/4 de hora…Que en formato Time o cotidiano son 15 Minutos.
  #8 (permalink)  
Antiguo 05/12/2008, 11:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Problema con datos tipo time

1. No has entendido la intención de la frase o no me expresé bien. Estás usando incorrectamente la función, porque lo que haces es usar la función incorrecta para resolver el problema. Si lo que pretendes es resolver la suma de horas posibles al sumar tiempos y administrar las más de 838 posibles, debes separar los valores que la componen en DIAS/HORAS, para lo cual las funciones aritméticas % y DIV son mas eficientes si estás manipulando un entero, y no decimales.
2. Usar ROUND() con dos decimales te genera una pérdida de 36 segundos en una hora. Por esa razón también es una solución poco práctica. La acumulación de tiempos debe ser exacta, especialmente cuando tratas con información contable.
3. Te imaginarás que la conversión a formato decimal no es algo que desconozca, especialmente cuando ese es el formato de almacenamiento real de los TIME y DATETIME... Conozco su función, metodología e implementaciones, pero no considero que sea el modo más eficiente para realizar los cálculos que estás intentando lograr.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:24.