2015-12-08 96 views
0

我的数据库中有一个字段用于专家在电话上花费的总时间,另一个用于总通话时间。我试图计算平均通话时间,但Access不会以hh:mm:ss格式返回号码,而无需进行某些编码。尽管我在VBA中编写东西,但我很新。我尝试将“平均通话时间”字段的格式更改为“长时间”,但它显示为一天中的某个时间,而不是平均时间,或者我看错了?如何计算Microsoft Access中的平均通话时间

是否有其他人遇到类似的问题,如果是的话,你是如何解决它的?

任何帮助,将不胜感激

谢谢!

+1

“总时间”和“总呼叫”列的数据类型是什么?您能否提供一些示例记录和预期输出?也很高兴看到你现在正在做什么来得到你的答案(如果它接近工作的话) – Brad

+0

总时间是某人在一个给定的月份上花费的时间总数,每个人在这个月中的电话号码。他们的平均通话时间均为月度和年度 我认为我遇到的问题的一部分是我无法输入17:42:27作为没有接入思考的每月总时间我正在输入5 :42 PM – gkneib

回答

0

如果长时间使用的数据类型的日期记录,您可以使用查询:

Select CDate(Avg([TimeSpent])) As TotalTimeSpent 
From YourTable 

您可能必须指定该字段的格式:h:nn

如果你的时间将超过24 ,你将不得不使用一个函数来创建一个HH:NN阅读:

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 

,然后调整查询:

Select FormatHourMinute(CDate(Avg([TimeSpent]))) As TotalTimeSpent 
From YourTable 
+0

如果我把时间转换成一个字符串,我将无法在计算中使用它,但是正确的? – gkneib

+0

是的,日期/时间字符串仅用于显示,应避免存储。 – Gustav

0

访问中的时间字段旨在存储时间点 - 而不是持续时间。尽管您可能选择了“长时间”作为显示格式,但访问仍将其存储为特定日期。您可以在长时间格式化日期时间字段时尝试此操作,在其中输入一些数据,然后将格式更改为tt.mm.jjjj hh:nn:ss,它会在1899年12月30日 - 访问时间的开始日期给您一些时间。

如果您创建了一个查询,将“long time”类型的时间相加,并将tt.mm.jjjj hh:nn:ss放入格式框中,只要总和超过24小时,它就会显示更晚的日期。

因此,要处理持续时间,您通常会以数字字段中所需的最小精度(小时,分钟,秒,几个世纪)存储所有内容,并从中计算所有内容。 在表单中输入数据比直接输入数据表要容易得多(也更安全),因此您可以使用自动转换持续时间的时间字段。