正确的访问时间总和

correct sum of hours in access

我在 Access 2010 数据库中有两列,其中包含一些计算字段:

time_from time_until calculated_field(time_until-time_from)
10:45      15:00         4:15
13:15      16:00         2:45
11:10      16:00         4:50
08:00      15:00         7:00
08:00      23:00        15:00

到目前为止,一切都很好:计算字段完成了它的工作,告诉我总时数和分钟数... 现在,我需要一个计算字段的总和.... 我输入了一个表达式生成器:=Sum([time_until]-[time_from]) 我想总和应该给我 33:50... 但它给了我一些 9:50。为什么会这样?有办法解决这个问题吗?

更新: 当我这样说时:

=Format(Sum([vrijeme_do]-[vrijeme_od])*24)

我得到一个小数点数...我想这是正确的.... 例如,25 小时和 30 分钟显示为 25,5

但是,如何将此 25,5 格式化为 25:30 的格式?

我猜你想在文本框中显示总数?正确的表达方式是 =SUM([calculated_field_name]).

类似于@HansUp 的答案,无需 VBA 代码即可完成

Format(24 * Int(SUM(elapsed_time)) + Hour(SUM(elapsed_time)), "0") & ":" & Format(SUM(elapsed_time), "Nn")

正如@Arvo 在他的评论中提到的,这是一个格式问题。 calculated_field 总和的预期结果是 33:50。但是,该总和是一个 Date/Time 值,并且由于小时数大于 24,因此 Date/Time 的天数部分提前 1,其余部分 9:50 显示为时间。显然,您的总数被格式化为仅显示时间部分;不显示日部分。

但是 calculated_field 的实际 Date/Time 值是 #12/31/1899 09:50 #。您可以使用自定义函数以所需格式显示该值:

? duration_hhnn(#12/31/1899 09:50#)
33:50

这是函数:

Public Function duration_hhnn(ByVal pInput As Date) As String
    Dim lngDays As Long
    Dim lngMinutes As Long
    Dim lngHours As Long
    Dim strReturn As String

    lngDays = Int(pInput)
    lngHours = Hour(pInput)
    lngMinutes = Minute(pInput)

    lngHours = lngHours + (lngDays * 24)
    strReturn = lngHours & ":" & Format(lngMinutes, "00")
    duration_hhnn = strReturn
End Function

请注意函数 returns 一个字符串值,因此您不能直接对其进行进一步的日期运算。