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

Sumar Columna tipo TIME

Estas en el tema de Sumar Columna tipo TIME en el foro de Mysql en Foros del Web. hola a todos Al sumar datos tipo TIME encontré un problema cuando supera a 838:59:59, ya que tiene un rango va de -838:59:59 a 838:59:59, ...
  #1 (permalink)  
Antiguo 16/06/2009, 13:25
 
Fecha de Ingreso: junio-2009
Ubicación: Bogota
Mensajes: 16
Antigüedad: 14 años, 10 meses
Puntos: 0
Pregunta Sumar Columna tipo TIME

hola a todos
Al sumar datos tipo TIME encontré un problema cuando supera a 838:59:59, ya que tiene un rango va de -838:59:59 a 838:59:59, Cuando es inferior es fácil
Código sql:
Ver original
  1. SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(tothra)))AS 'HORAS_TOTALES'
  2. FROM hratra
para solucionarlo hice esto, pero la verdad no me convence
Código sql:
Ver original
  1. SELECT CONCAT( (
  2.  
  3. SELECT IF( (
  4. SUM( SUBSTR( tothra, INSTR( tothra, ':' ) +1 ) ) ) > '59',
  5. SUBSTRING( (SUM( SUBSTR( tothra, INSTR( tothra, ':' ) +1 ) ) /60 ) , 1, INSTR( (SUM( SUBSTR( tothra, INSTR( tothra, ':' ) +1 ) ) /60 ) , '.' ) -1) + ( SUM( SUBSTRING( tothra, 1, INSTR( tothra, ':' ) -1 ) ) ) ,
  6. SUM( SUBSTRING( tothra, 1, INSTR( tothra, ':' ) -1 ) )
  7. )
  8. ), ':', (
  9.  
  10. SELECT IF( (
  11. SUM( SUBSTR( tothra, INSTR( tothra, ':' ) +1 ) ) ) > '59', MOD( SUM( SUBSTR( tothra, INSTR( tothra, ':' ) +1 ) ) , 60 ) , SUM( SUBSTR( tothra, INSTR( tothra, ':' ) +1 ) )
  12. )
  13. )
  14. ) AS 'HORAS_TOTALES'
  15. FROM hratra
Si alguien tiene una mejor forma o pude mejorar la que ya tengo seria estupendo.

Les agradezco mucho si me pueden colaborar, muchas gracias de antemano
  #2 (permalink)  
Antiguo 16/06/2009, 13:43
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Sumar Columna tipo TIME

Que versión de mysql tienes?

No veo que ese rango sea un problema en mi server.

Código mysql:
Ver original
  1. mysql> select sec_to_time(428920540);
  2. +------------------------+
  3. | sec_to_time(428920540) |
  4. +------------------------+
  5. | 119144:35:40           |
  6. +------------------------+
  7. 1 row in set (0.00 sec)
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 16/06/2009, 13:51
 
Fecha de Ingreso: junio-2009
Ubicación: Bogota
Mensajes: 16
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: Sumar Columna tipo TIME

Gracias por tu respuesta
La version es la 5.0.77 del hosting
Código sql:
Ver original
  1. SELECT sec_to_time(428920540);
  2. 838:59:59

Última edición por zerts; 16/06/2009 a las 14:06
  #4 (permalink)  
Antiguo 16/06/2009, 14:02
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: Sumar Columna tipo TIME

Cita:
Iniciado por huesos52 Ver Mensaje
Que versión de mysql tienes?

No veo que ese rango sea un problema en mi server.

Código mysql:
Ver original
  1. mysql> select sec_to_time(428920540);
  2. +------------------------+
  3. | sec_to_time(428920540) |
  4. +------------------------+
  5. | 119144:35:40           |
  6. +------------------------+
  7. 1 row in set (0.00 sec)
Yo tengo la 5.0.45-community-nt, y también me produce el mismo error.
__________________
¿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 16/06/2009, 14:07
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Sumar Columna tipo TIME

tienes razón... hay una limitante en el campo time.

Si la cantidad de tiempo es tan grande como requieres, yo cambiaría el campo de tipo time a bigint o algo así.
Con el tiempo en segundos, puedes mostrarlo en formato time sin ningún problema. y evitas grandes esfuerzos del sistema es mostrar un simple dato que puede tratarse de multiples formas.

Aunque tu consulta funcione, creo que no vale la pena realizar esta consulta para obtener este simple dato.

EDITO---
Una cosa es realizar un select basado en el campo, y otra es almacenarlo.

Un saludo.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #6 (permalink)  
Antiguo 16/06/2009, 14:12
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Sumar Columna tipo TIME

Que extraño...

Código mysql:
Ver original
  1. mysql> SELECT sec_to_time(428920540);
  2. +------------------------+
  3. | sec_to_time(428920540) |
  4. +------------------------+
  5. | 119144:35:40           |
  6. +------------------------+
  7. 1 row in set (0.00 sec)
  8.  
  9. mysql> select version();
  10. +---------------------+
  11. | version()           |
  12. +---------------------+
  13. | 5.0.27-community-nt |
  14. +---------------------+
  15. 1 row in set (0.00 sec)
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 16/06/2009, 14:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Sumar Columna tipo TIME

Por si sirve de algo, y desde segundos:
SELECT concat(CAST(FLOOR((segundos/3600)) as char),':', LPAD(CAST(FLOOR((segundos%3600)/60)AS CHAR),2,'0'),':', LPAD(CAST((segundos%60) AS CHAR),2,'0')) horas FROM tabla

Saca un formato hora, pero no es hora, claro; se trata de una cadena con la que no podrás operar. Sólo presentación.
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 11:22.