Sql 存取减法时间

Sql 存取减法时间,sql,ms-access,datetime,ms-access-2007,Sql,Ms Access,Datetime,Ms Access 2007,如何在Access表中减去两次 查询必须自动完成。我需要减去到达时的剩余时间,这样我就能得到工作时间: 查询必须填入表中的小时数列,这样我就可以在c#程序中得到它 [左]-[到达] 日期差异 DateDiff(间隔、日期1、日期2、[firstdayofweek]、[firstweekofyear]) DateDiff(“h”,[到达],[左])在access中,如果字段是日期/时间类型,则只需将其减记并根据需要格式化输出即可。减法的结果是天数和天数的分数。如果你想要以小时为单位,只需乘以24

如何在Access表中减去两次

查询必须自动完成。我需要减去到达时的剩余时间,这样我就能得到工作时间:

查询必须填入表中的小时数列,这样我就可以在c#程序中得到它

[左]-[到达]

日期差异

DateDiff(间隔、日期1、日期2、[firstdayofweek]、[firstweekofyear])


DateDiff(“h”,[到达],[左])

在access中,如果字段是日期/时间类型,则只需将其减记并根据需要格式化输出即可。减法的结果是天数和天数的分数。如果你想要以小时为单位,只需乘以24,就可以得到,小时数和小时数

SELECT cdbl([Left] - [Arrived]) * 24 as worked_hours FROM yourtable

正如Russell提到的,使用
DateDiff
函数。我在一个测试MsAccess数据库上进行了测试,它可以正常工作。以下是我的选择声明:

SELECT DateDiff('n',[Arrived],[Left])/60 AS Worked, 
       DateDiff('s',[Arrived],[Left])/3600 AS Worked2, 
       *
FROM Table1;
样本结果:

Worked               Worked2               Left                  Arrived
1                    0.999722222222222      4/9/2013 3:00:00 PM  4/9/2013 2:00:01 PM
0.833333333333333    0.833055555555556      4/9/2013 3:00:00 PM  4/9/2013 2:10:01 PM
1.66666666666667E-02 2.77777777777778E-04   4/9/2013 3:00:00 PM  4/9/2013 2:59:59 PM
24                   23.9997222222222       4/9/2013 3:00:00 PM  4/8/2013 3:00:01 PM

正如您所见,Worked2方法(按秒计算)更精确。

DateDiff
是一个很好的函数,我更喜欢它,因为
DateDiff
会缩短您的工作时间。我相信OP的员工会喜欢在7:59工作时被计算为7小时。如果使用秒,DateDiff不会截断小时。请看我的帖子。但这也可以。如果要通过表值(而不是查询)执行此操作,则不能使用默认值。必须使用计算列。您最好使用查询。我认为要求不够严格,但我已经更新了我的帖子以适应这一点。感谢您提供的解决方案(所有解决方案都很好),但是我怎样才能使access自动计算并在小时列中显示它呢?我不理解你的新查询:你想用计算结果更新同一个表上的字段吗?“在小时栏中显示”是什么意思?是的,我想更新“小时”。“小时”必须是工作时间。它必须自动更新(计算“左”-“到达”),最好的解决方案是删除该字段并提供所有计算结果,以避免冗余。但是如果您想要更新,您可以这样做:
updateyourtable SET hours=cdbl([Left]-[arrized])*24
和可选的where子句
where hours为null
或其他一些操作。因此,您应该注意,这种方法不知道夏令时的变化。如果您的员工通宵工作,或者在清晨工作,并且您所在的时区有DST,那么一年两次,您可能会少付或多付员工一小时的工资。