总结 MS Access 中的小时和分钟 - 如何处理庞大的数据集

Posted

技术标签:

【中文标题】总结 MS Access 中的小时和分钟 - 如何处理庞大的数据集【英文标题】:Summing up Hours and Minutes in MS Access - How to deal with huge datasets 【发布时间】:2016-08-29 20:49:53 【问题描述】:

所以我在 MS Access 2010 中有一个表格,如下所示:

Date           Pers. ID      Dauer Tätigkeit

10.04.2016     10            01:15
11.05.2016     5             05:00
...

我想获取“Dauer Tätigkeit”的总小时数。 “Dauer Tätigkeit”中的所有条目均采用日期格式。

下面的公式应该可以完成以“1346:30”之类的格式列出结尾的工作。它实际上为小型数据集完成了工作。

我必须使用的数据集有大约 800 个条目,平均每小时 3 小时。所以我期望在大约 2400 到 8000 小时的范围内得到一个数字,如果我用 23:59 填充每一行,它应该最多给我一个低于 20.000 的数字。 我得到的数字远低于 100 万。

当总小时数小于大约 500 时,错误就会消失(我通过将条目数减半来进行测试,而不是进一步)。所以我认为,我在某处遇到了溢出问题。

现在的问题是在哪里。可能发生这种情况的明显点是刚开始的“Int”,但从公式中删除它并不能解决它。

 =Format(Int(Summe([Dauer Tätigkeit]))*24+Stunde(Summe([Dauer Tätigkeit]));"00") 
     & ":" & Format(Minute(Summe([Dauer Tätigkeit]));"00")

我现在的问题是: 有语法问题吗? 是溢出问题吗? 可以转换为 LongInt 解决它吗?如果是,如何将其实施到公式中? 我问的问题对吗?

【问题讨论】:

是否可以保留一个单独的整数分钟值,然后自己进行计算和格式化?它没有那么复杂,因为它只是总数?即除以 60 得到总小时数。和 mod 60 以获得分钟。 那么我肯定会遇到 int 的溢出问题。我的数据集超过 32,767 分钟 对求和的结果使用 long。或“货币”,但这确实是“过分”。请参阅:w3schools.com/sql/sql_datatypes.asp 了解数据类型。 当总小时数小于大约 500 时错误消失...什么错误?此外,您说该字段是日期时间,因此这些应该是时间值,而不是要聚合的小时/分钟持续时间(即 1:15 AM/PM、5:00 AM/PM)。除非您需要列或行之间的时间差?如前所述,使用数字列数据类型作为持续时间。 【参考方案1】:

始终将日期处理为日期,而不是字符串,不长,也不是货币。

这个函数会做:

Public Function FormatHourMinute( _
  ByVal datTime As Date, _
  Optional ByVal strSeparator As String = ":") _
  As String

' Returns count of days, hours and minutes of datTime
' converted to hours and minutes as a formatted string
' with an optional choice of time separator.
'
' Example:
'   datTime: #10:03# + #20:01#
'   returns: 30:04
'
' 2005-02-05. Cactus Data ApS, CPH.

  Dim strHour       As String
  Dim strMinute     As String
  Dim strHourMinute As String

  strHour = CStr(Fix(datTime) * 24 + Hour(datTime))
  ' Add leading zero to minute count when needed.
  strMinute = Right("0" & CStr(Minute(datTime)), 2)
  strHourMinute = strHour & strSeparator & strMinute

  FormatHourMinute = strHourMinute

End Function

对于您的示例,输出将是:

Result = FormatHourMinute(#23.59# * 800)
' Result -> 19186:40

你的表情将是:

=FormatHourMinute(Summe([Dauer Tätigkeit]))

【讨论】:

以上是关于总结 MS Access 中的小时和分钟 - 如何处理庞大的数据集的主要内容,如果未能解决你的问题,请参考以下文章

如何连接到数据库 MS Access?

从毫秒到小时、分钟、秒和毫秒

将作业从 MS Access 文件同步到 MySQL 数据库

如何加入 MS Access 中的功能?

如何在 VBA 代码中的 ms-access 中执行查询?

如何比较 MS_Access 中的整数类型记录和字符串类型记录?