我正在使用Access中的考勤表,我有InTime
和OutTime
。这些字段是日期/时间字段。
有些记录只包含时间11:40:00
,有些包含日期以及21-07-2015 11:45:00
之类的时间。因此,使用以下代码来获得工作时间。
HrsPresent: Round(DateDiff("n",TimeValue(TimeSerial(Hour([TimeIn]),Minute([TimeIn]),Second([TimeIn]))),TimeValue(TimeSerial(Hour([TimeOut]),Minute([TimeOut]),Second([TimeOut]))))/60,2)
使用上面的代码,在查询中的列中提供了正确的工作小时数,但如果任何字段为空,则我得到结果中的#error
。
我尝试使用Nz
,IsError
,IsNumeric
,但都是徒劳。
答案 0 :(得分:1)
在执行计算之前,您基本上只需要确保两个必需字段都不为空。您可以使用两个IIF
语句执行此操作。如果一个字段为空,那么您只需指定一个默认值或按您希望的方式处理它。
在我的例子中,默认值是零,我必须警告你,虽然这是自由的,但我并不十分确信我的括号排列正确。另外我很抱歉这一切都在一条线上,我想不出一个合理的方法来分解它。
HrsPresent: IIF(Nz([TimeIn],"") = "", 0, IIF(Nz([TimeOut],"") = "", 0, Round(DateDiff("n",TimeValue(TimeSerial(Hour([TimeIn]),Minute([TimeIn]),Second([TimeIn]))),TimeValue(TimeSerial(Hour([TimeOut]),Minute([TimeOut]),Second([TimeOut]))))/60,2)))
有关IIF
语句的详细信息,请访问此处:http://www.techonthenet.com/access/functions/advanced/iif.php