Consulta access con formato hora

Tengo consulta con dos datos de horas, quiero calcular el tiempo entre las dos y me salen datos raros

21/6/2024 HLBU9962078 9:29:46 13:06:53 3:77:07

Ejemplo entre las 13:06:53 y 09:29:46 me pone 3:77 minutos

3 Respuestas

Respuesta

Ningún ordenador del mundo trabaja con fechas u horas. Trabajan con números. Es decir, una hora es 1/24 de 1 día. Un minuto es 1/24/60 de 1. Etc.

Por eso, si en la consulta pones HoraFin - HoraInicio te saldrá algo como 0,12336748

Tendrías que multiplicar ese número por 24 para obtener las horas. El resto multiplicarlo por 60 para obtener los minutos, etc y luego "recomponer" los resultados.

En código VB se puede hacer sin problemas, pero tendría que ser en un formulario o informe, ya que las consultas no tienen código.

Respuesta
1

Puede utilizar esta función y la llama en una consulta.

Public Function diftiempo(hentra As Date, hsale As Date) As String
    Dim diferencia As Date
    If hentra < hsale Then
        diferencia = hsale - hentra
    Else
        diferencia = 1 + hsale - hentra
    End If
    diftiempo = Format(diferencia, "hh:mm:ss")
End Function

Ejemplo de llamada

?diftiempoStr("09:29:46","13:06:53")
03:37:07

Si quiere el ejemplo puede solicitarlo a [email protected]

OK 

y como incluyo esta función el la consulta vista diseño ??

Gracias

En la cuadrícula de diseño de Access, por ejemplo, llevaría los campos

id,fechalabor,horaentra,horasale,tiempo: diftiempoStr([horaentra];[horasale])

Observe la parte resaltada, le asigno a la variable tiempo el resultado que retorna la función.

El equivalente en SQL es:

SELECT tblregistro_horas.id, tblregistro_horas.fechalabor, tblregistro_horas.horaentra, tblregistro_horas.horasale, diftiempoStr([horaentra],[horasale]) AS tiempo
FROM tblregistro_horas;
Respuesta

En Access la unidad básica es el día, las horas son una parte fraccionaria del día y se guarda en formato decimal por lo que necesitara siempre una conversion y con la función FORMAT se logra.

En VBA y con los datos aportados:

¿

? Cdate("13:06:53") - Cdate("09:29:46")
0,150775462962963

Si le aplicamos formato al resultado:

¿

? Format(0.150775462962963,"hh:mm:ss")
03:37:07

En una consulta se puede obtener así:

Tiempo_Empleado: Format([Hora_Final] - [Hora_inicio]; "hh:nn:ss")

El calculo anterior solo es fiel si ambas marcas de hora pertenecen al mismo día, y no se superan 24 horas.

Si en la franja horaria se cambia de día y no se superan 24 horas (un día) se puede condicionar el calculo anterior para que siga siendo fiel.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas