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

Operación con horas en mysql

Estas en el tema de Operación con horas en mysql en el foro de Mysql en Foros del Web. Amigos tengo una consulta. tengo una tabla donde registra la fecha, hora de ingreso y hora de salida. Lo que quiero hacer es restar estas ...
  #1 (permalink)  
Antiguo 01/04/2011, 21:01
Usuario no validado
 
Fecha de Ingreso: julio-2008
Ubicación: Quito
Mensajes: 76
Antigüedad: 15 años, 9 meses
Puntos: 2
Operación con horas en mysql

Amigos tengo una consulta. tengo una tabla donde registra la fecha, hora de ingreso y hora de salida. Lo que quiero hacer es restar estas horas y luego sacarles el promedio, pero desde que resto las horas tengo este problema:

Esta es la sentencia:

Cita:

SELECT tic_id, tic_hora_out,tic_hora_in, tic_hora_out-tic_hora_in, TIME_FORMAT(tic_hora_out-tic_hora_in,'%H:%i:%s'), addtime(tic_hora_out,tic_hora_in)
from ticket
Y el resultado es el siguiente:

Cita:

tic_id | tic_hora_out | tic_hora_in | tic_hora_out-tic_hora_in | TIME_FORMAT(tic_hora_out-tic_hora_in,'%H:%i:%s') | addtime(tic_hora_out,tic_hora_in)
194 | 16:36:53 | 16:36:49 | 4 | 00:00:04 | 33:13:42
192 | 16:27:53 | 16:21:15 | 638 | 00:06:38 | 32:49:08
198 | 17:24:34 | 17:08:00 | 1634 | 00:16:34 | 34:32:34
199 | 17:26:22 | 17:24:37 | 185 | NULL | 34:50:59
197 | 17:07:51 | 16:52:10 | 5541 | 00:55:41 | 34:00:01
196 | 16:52:05 | 16:42:32 | 973 | NULL | 33:34:37
195 | 16:42:17 | 16:37:00 | 517 | 00:05:17 | 33:19:17
193 | 16:35:19 | 16:32:45 | 274 | NULL | 33:08:04
189 | 16:15:19 | 16:13:24 | 195 | NULL | 32:28:43
190 | 16:18:08 | 16:16:01 | 207 | 00:02:07 | 32:34:09
191 | 16:21:01 | 16:18:12 | 289 | NULL | 32:39:13
Como pueden ver los null son valores que debería ser correctos pero no entiendo porque me sale null, ahora lo que me doy cuenta es lo siguiente: Cuando el segundo de la hora_out es menor al segundo de hora_in da null. Porque???

Espero su valiosa ayuda
  #2 (permalink)  
Antiguo 02/04/2011, 05:53
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: Operación con horas en mysql

Usar funciones es más práctico en muchas ocasiones, ya qe tienen resuelto el problema más fácilmente:
Código MySQL:
Ver original
  1.     tic_id,
  2.     tic_hora_out,
  3.     tic_hora_in,
  4.     TIMESTAMPDIFF(SECOND, tic_hora_out, tic_hora_in) segundos,
  5.     SEC_TO_TIME(TIMESTAMPDIFF(SECOND, tic_hora_out, tic_hora_in) horas
  6. FROM ticket
Detalle: La última operación que haces no tiene sentido (addtime(tic_hora_out,tic_hora_in) ). ¿Qué es lo que quieres obtener?
__________________
¿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 02/04/2011, 19:21
Usuario no validado
 
Fecha de Ingreso: julio-2008
Ubicación: Quito
Mensajes: 76
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Operación con horas en mysql

Gracias por tu respuesta. Aplique esta consulta:

Código MySQL:
Ver original
  1. tic_id,
  2. tic_hora_out,
  3. tic_hora_in,
  4. TIMESTAMPDIFF(SECOND, tic_hora_out, tic_hora_in)
  5. FROM ticket

Me da el resultado NULL en la columna TIMESTAMDIFF, mi consulta es la siguiente en la tabla la columna de horas son time, debo cambiarlas a Timestam, para q funcione este código?

Gracias por tu ayuda

Última edición por ivlecamo; 02/04/2011 a las 19:28
  #4 (permalink)  
Antiguo 02/04/2011, 20:50
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: Operación con horas en mysql

Vamos por otra, como te dije, tienes que revisar las funciones de fecha y hora de MySQL.
Cuando alguien te pasa un link, ¡leelo y experimenta! No te quedes con un "no me sale". Busca la función apropiada leyendo la descripción lo que hacen. No veo que hayas probado nada de lo que ese link dice.

Probemos así:
Código MySQL:
Ver original
  1.     tic_id,
  2.     tic_hora_out,
  3.     tic_hora_in,
  4.     TIME_TO_SEC(SUBTIME(tic_hora_out, tic_hora_in)) segundos,
  5.     SUBTIME(tic_hora_out, tic_hora_in) horas
  6. FROM ticket
__________________
¿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 04/04/2011, 11:41
Usuario no validado
 
Fecha de Ingreso: julio-2008
Ubicación: Quito
Mensajes: 76
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Operación con horas en mysql

Si probé el link, es más te paso todas las consultas que hice y no me funcionó... por eso te pregunté si este debía cambiar el tipo de variable..

Mira las consultas que hice de acuerdo con tu link, algunas funcionan otras no:
Código MySQL:
Ver original
  1. SELECT TIMESTAMPDIFF(MONTH,'2003-02-01','2003-05-01');
  2.  
  3. SELECT TIME_FORMAT( Time('4:31:15') - Time('3:25:15') ,'%h:%i:%s %p');
  4.  
  5. SELECT tic_id, TIME_FORMAT(tic_hora_out-tic_hora_in,'%H:%i:%s')
  6. from ticket
  7.  
  8. SELECT tic_id, tic_hora_out,tic_hora_in, tic_hora_out-tic_hora_in as Resta, TIME_FORMAT(tic_hora_out-tic_hora_in,'%H:%i:%s') as Formato, addtime(tic_hora_out-tic_hora_in)
  9. from ticket
  10.  
  11. SELECT tic_id, tic_hora_out,tic_hora_in, tic_hora_out-tic_hora_in, TIME_FORMAT(tic_hora_out-tic_hora_in,'%H:%i:%s'), addtime(tic_hora_out,tic_hora_in)
  12. from ticket
  #6 (permalink)  
Antiguo 04/04/2011, 12:28
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: Operación con horas en mysql

Bueno, lo que yo te estoy pasando en el último post funciona perfectamente con horas como las que te producen NULL a tí:
Código MySQL:
Ver original
  1. mysql> DROP TABLE IF EXISTS horas;
  2. Query OK, 0 rows affected (0.06 sec)
  3.  
  4. mysql> CREATE TABLE horas(tic_hora_out TIME, tic_hora_in TIME);
  5. Query OK, 0 rows affected (0.08 sec)
  6.  
  7. mysql> INSERT INTO HORAS VALUES
  8.     -> ('17:26:22','17:24:37'),
  9.     -> ('16:52:05','16:42:32'),
  10.     -> ('16:35:19','16:32:45'),
  11.     -> ('16:15:19','16:13:24'),
  12.     -> ('16:21:01','16:18:12');
  13. Query OK, 5 rows affected (0.05 sec)
  14. Records: 5  Duplicates: 0  Warnings: 0
  15.  
  16. mysql> SELECT
  17.     ->     tic_hora_out,
  18.     ->     tic_hora_in,
  19.     ->     TIME_TO_SEC(SUBTIME(tic_hora_out, tic_hora_in)) segundos,
  20.     ->     SUBTIME(tic_hora_out, tic_hora_in) horas
  21.     -> FROM horas;
  22. +--------------+-------------+----------+----------+
  23. | tic_hora_out | tic_hora_in | segundos | horas    |
  24. +--------------+-------------+----------+----------+
  25. | 17:26:22     | 17:24:37    |      105 | 00:01:45 |
  26. | 16:52:05     | 16:42:32    |      573 | 00:09:33 |
  27. | 16:35:19     | 16:32:45    |      154 | 00:02:34 |
  28. | 16:15:19     | 16:13:24    |      115 | 00:01:55 |
  29. | 16:21:01     | 16:18:12    |      169 | 00:02:49 |
  30. +--------------+-------------+----------+----------+
  31. 5 rows in set (0.00 sec)
Pruébalo.

Por otro lado, no me has respondido para qué haces ADDTIME(tic_hora_out,tic_hora_in) . Esa operación no tienen ningún sentido ni utilidad.
__________________
¿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 04/04/2011, 15:14
Usuario no validado
 
Fecha de Ingreso: julio-2008
Ubicación: Quito
Mensajes: 76
Antigüedad: 15 años, 9 meses
Puntos: 2
Respuesta: Operación con horas en mysql

ADDTIME estaba probando, leí en el enlace que me mandaste y me gusta probar los códigos para entenderlos un poco... gracias ya me salí lo que deseaba, este código si me sirvió... gracias
  #8 (permalink)  
Antiguo 04/04/2011, 15: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: Operación con horas en mysql

ADDTIME() suma dos valores TIME, en tu caso no tiene ningún sentido porque excedes el calculo de horas de un día. Diferente sería si lo que sumaras fuese la cantidad de tiempo transcurrido entre entrada y salida.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: horas
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 17:26.