Sql 访问:表达式太复杂,无法计算-求和时间值
我正在用Access做一个简单的应用程序,我有一个查询:Sql 访问:表达式太复杂,无法计算-求和时间值,sql,ms-access,Sql,Ms Access,我正在用Access做一个简单的应用程序,我有一个查询: SELECT QryInOutMday.[_USERID], QryInOutMday.[_WORKING] FROM QryInOutMday; 获取下一个值时不会出现问题: _用户ID_正在工作 ----------------- 7607:33:15 7616:22:54 6808:01:22 7707:33:15 7707:50:00 我尝试将工作时间相加,并将其与用户id分组,如下所示: SELECT QryInOutMday
SELECT QryInOutMday.[_USERID], QryInOutMday.[_WORKING]
FROM QryInOutMday;
获取下一个值时不会出现问题:
_用户ID_正在工作-----------------
7607:33:15
7616:22:54
6808:01:22
7707:33:15
7707:50:00
我尝试将工作时间相加,并将其与用户id分组,如下所示:
SELECT QryInOutMday.[_USERID], SUM(QryInOutMday.[_WORKING])
FROM QryInOutMday
GROUP BY QryInOutMday.[_USERID];
但是我得到了一个错误:表达式太复杂,无法计算我不确定这个错误是什么意思。但问题是,您无法对时间值求和。您可以将其转换为一个单位,然后求和:
SELECT iom.[_USERID],
SUM(DATEDIFF("s", 0, iom.[_WORKING])) as total_seconds
FROM QryInOutMday as iom
GROUP BY iom.[_USERID];
您可以使用格式
是否希望获得格式为hh:mm:ss:
SELECT iom.[_USERID],
FORMAT(SUM(DATEDIFF("s", 0, iom.[_WORKING]))/(24*60*60), "hh:mm:ss") as total_hhmmss
FROM QryInOutMday as iom
GROUP BY iom.[_USERID];
如果[_WORKING]是Date,它应该可以工作。如果是文本,首先转换为日期:
SELECT QryInOutMday.[_USERID], SUM(CDate(QryInOutMday.[_WORKING]))
FROM QryInOutMday
GROUP BY QryInOutMday.[_USERID];
如果可能存在空值,请过滤掉这些值或使用CVDate:
如果总和可能超过24小时,您可以使用此功能读取格式为小时和分钟的总和:
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
我试着按如下方式计算每一个小时和分钟:选择QryInOutMday.[u USERID],COUNT(QryInOutMday.[u USERID])作为工作日,Int(SUM(DATEDIFF(“h”,0,QryInOutMday.[u WORKING]))作为工作小时,Int(SUM(DATEDIFF(“n”,0,QryInOutMday.[u WORKING]))作为QryInOutMday组中的工作日,由QryInOutMday.[u USERID]);现在我得到的小时数是int“23”,分钟数是int“1435”,分钟数应该是1435-23*60=“55”,我怎么能得到呢?“你不能求时间值的和”。。。哦,你当然可以。
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