访问报告 - 计算 2 次之间的小时数
Access Report - Calculating Hours between 2 times
我有一个带有 Access 前端的 SQL 休假数据库。我目前在报告中有 BeginTimeOff 和 EndTimeOff 字段。在我的 SQL 数据库中,这些是 Time(7) 字段。我想要一个新字段来显示时差。我试图让控制源等于:
=DateDiff("n",CDate([BeginTimeOff]),CDate([EndTimeOff]))
和
=DateDiff("n",[BeginTimeOff],[EndTimeOff])
和
= [EndTimeOff] - [BeginTimeOff]
我什么都做不了。我可以很好地减去日期,但不能减去时间。帮助!
Access 没有时间字段类型(Access Date/Time
字段同时具有日期和时间部分),以及 ODBC linked [=50= 中的任何未知字段类型] 通常映射到 Text
。所以如果你有一个 SQL 服务器 table 有 time(7)
列 ...
CREATE TABLE [dbo].[TimeTest](
[Id] [int] NOT NULL,
[BeginTimeOff] [time](7) NULL,
[EndTimeOff] [time](7) NULL
...
然后 Access 中相应的 ODBC linked table 将有 Text(255)
列:
如果您想直接使用 linked table 中的列,那么您必须先将这些值转换为 Access 可以接受的形式,然后才能使用 [=18 之类的函数=] 与他们一起做计算。具体来说,Access Date/Time 值不支持小数秒,因此您必须删除它们。也就是说,
CDate("07:59:00.0000000")
将失败并出现 "Type mismatch" 错误(运行-时间错误 13),而
CDate("07:59:00")
工作正常。您可以使用 InStr()
、Left()
、Mid()
等字符串操作函数来去除字符串的小数部分。
另一种方法是创建一个 SQL 服务器视图,将 DATE(7)
列转换为 DATETIME
CREATE VIEW [dbo].[TimeView]
AS
SELECT
Id,
DATEADD(day, -2, CONVERT(DATETIME, BeginTimeOff)) AS BeginTimeOff,
DATEADD(day, -2, CONVERT(DATETIME, EndTimeOff)) AS EndTimeOff
FROM dbo.TimeTest
然后如果您 link 到该视图,列将在 Access
中显示为 Date/Time
值
我有一个带有 Access 前端的 SQL 休假数据库。我目前在报告中有 BeginTimeOff 和 EndTimeOff 字段。在我的 SQL 数据库中,这些是 Time(7) 字段。我想要一个新字段来显示时差。我试图让控制源等于:
=DateDiff("n",CDate([BeginTimeOff]),CDate([EndTimeOff]))
和
=DateDiff("n",[BeginTimeOff],[EndTimeOff])
和
= [EndTimeOff] - [BeginTimeOff]
我什么都做不了。我可以很好地减去日期,但不能减去时间。帮助!
Access 没有时间字段类型(Access Date/Time
字段同时具有日期和时间部分),以及 ODBC linked [=50= 中的任何未知字段类型] 通常映射到 Text
。所以如果你有一个 SQL 服务器 table 有 time(7)
列 ...
CREATE TABLE [dbo].[TimeTest](
[Id] [int] NOT NULL,
[BeginTimeOff] [time](7) NULL,
[EndTimeOff] [time](7) NULL
...
然后 Access 中相应的 ODBC linked table 将有 Text(255)
列:
如果您想直接使用 linked table 中的列,那么您必须先将这些值转换为 Access 可以接受的形式,然后才能使用 [=18 之类的函数=] 与他们一起做计算。具体来说,Access Date/Time 值不支持小数秒,因此您必须删除它们。也就是说,
CDate("07:59:00.0000000")
将失败并出现 "Type mismatch" 错误(运行-时间错误 13),而
CDate("07:59:00")
工作正常。您可以使用 InStr()
、Left()
、Mid()
等字符串操作函数来去除字符串的小数部分。
另一种方法是创建一个 SQL 服务器视图,将 DATE(7)
列转换为 DATETIME
CREATE VIEW [dbo].[TimeView]
AS
SELECT
Id,
DATEADD(day, -2, CONVERT(DATETIME, BeginTimeOff)) AS BeginTimeOff,
DATEADD(day, -2, CONVERT(DATETIME, EndTimeOff)) AS EndTimeOff
FROM dbo.TimeTest
然后如果您 link 到该视图,列将在 Access
中显示为Date/Time
值