entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

3votos

Hola a todos,esperando que me puedan ayudar en este ejemplo de consulta como hago para que me aparezca en un campo temporal el resultado de la diferencia de las horas, en esta consulta tiene un campo temporal status pero solo muestra solo los mensajes si llego a tiempo a no. ¿Tendria que utilizar procedimientos

si en el registro tengo 8:30 y resto 08:00:00 tendria que mostrarme la diferencia de 00:30:00 minutos.

SELECT  ID_TRABAJADOR,REGISTRO_HORA_ENTRADA,
        (IF
            (DATE_FORMAT(REGISTRO_HORA_ENTRADA,'%H:%i:%s') <= '08:00:00', 'a tiempo',
         IF(**TIMEDIFF(DATE_FORMAT(REGISTRO_HORA_ENTRADA,'%H:%i:%s'),'08:00:00')** >'08:00:00','a tiempo','no llego a tiempo'))) AS STATUS
FROM REGISTRO  WHERE ID_TRABAJADOR=1;

1 Respuesta

2votos

white Puntos75880

Se me ocurre concatenar y usar las funciones de tiempo de msyql.

intenta así:

SELECT ID_TRABAJADOR, REGISTRO_HORA_ENTRADA,
(IF(
    DATE_FORMAT(REGISTRO_HORA_ENTRADA,'%H:%i:%s') > '08:00:00',
    CONCAT(
        LPAD(HOUR(TIMEDIFF('2015-03-02 08:00:00',  REGISTRO_HORA_ENTRADA)), 2, 0), ':',
        LPAD(MINUTE(TIMEDIFF('2015-03-02 08:00:00',  REGISTRO_HORA_ENTRADA)), 2, 0), ':',
        LPAD(SECOND(TIMEDIFF('2015-03-02 08:00:00',  REGISTRO_HORA_ENTRADA)), 2, 0)
    ),
    "no a tiempo"
)) AS satus
FROM `REGISTRO`

lo que hago es tomar las horas, los minutos, los segundos de atraso y concatenarlos.

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

EDIT: algo mas fácil es restar las fechas en timestamp:

SELECT ID_TRABAJADOR, REGISTRO_HORA_ENTRADA,
(IF(
    DATE_FORMAT(REGISTRO_HORA_ENTRADA,'%H:%i:%s') > '08:00:00',
    TIME_FORMAT(
        TIMESTAMP(REGISTRO_HORA_ENTRADA) - TIMESTAMP('2015-03-02 08:00:00'), '%H:%i:%s'),
    "no a tiempo"
)) AS satus
FROM `REGISTRO`

0voto

Cristi_C comentado

lo que colocas en la parte que dice:( (...),2,0), el 2,0 se refiere la cantidad de ceros de muestra en el formato 00:00:00
LPAD(HOUR(TIMEDIFF('2015-03-02 08:00:00', REGISTRO_HORA_ENTRADA)), 2, 0), ':',

0voto

white comentado

Si, lpad rellena una cadena con otra cadena.

LPAD( cadena, cantidad, cadena relleno )

aunque el segundo código es el correcto el primero que puse es innecesario.

saludos!

0voto

Cristi_C comentado

Te agradezco nuevamente por contestar a mi pregunta
saludos @white,

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta