使用“日期/时间已延长”数据类型

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021

“日期/时间已延长”数据类型存储日期和时间信息,与“日期/时间”数据类型类似,但是它提供更大的日期范围、更高的小数精度并且与 SQL Server datetime2 日期类型兼容。 当你将 Access 数据导入或链接到 SQL Server 时,可以一致地将 Access“日期/时间已延长”字段映射到 SQL Server datetime2 列。 有关详细信息,请参阅 datetime2 (Transact-SQL)

日期/时间扩展范围 警告 创建表达式并使用基于 Access 中“日期/时间扩展”数据类型的日期/时间函数时,可能会在计算中失去精度或遇到其他结果问题。 我们已经意识到此问题,并计划在即将发布的版本中更好地支持表达式和函数。 解决方法是,你可以创建一个传递查询来使用等效的 SQL Server 表达式和日期/时间函数。 有关详细信息,请参阅将 Access SQL 与 SQL Server TSQL 进行比较

本文内容

比较“日期/时间”和“日期/时间已延长”数据类型 使用“日期/时间已延长”数据类型 向后兼容性注意事项 在 VBA 中将“日期/时间已延长”数据类型用作字符串

比较“日期/时间”和“日期/时间已延长”数据类型

下表总结了两种数据类型之间的重要差异。

属性 日期/时间 日期/时间已延长
最小值 100-01-01 00:00:00 0001-01-01 00:00:00
最大值 9999-12-31 23:59:59.999 9999-12-31 23:59:59.9999999
准确度 0.001 秒 1 纳秒
大小 双精度浮点 42 字节编码字符串

返回页首

使用“日期/时间已延长”数据类型

以下信息介绍了重要的使用注意事项。

表设计视图 若要利用更大的数据范围和更高的精度,可以将字段添加到 Access 表。 还可以在表设计视图中将“日期/时间”转换为“日期/时间已延长”数据类型。 也支持将此数据类型用作主键字段。 有关详细信息,请参阅创建表并添加字段

输入日期和时间 输入日期和时间值类似于“日期/时间”数据类型,但也可以输入小数纳秒。 例如:

  • 输入格式:mm/dd/yyyy hh:mm:ss.nnnnnnn
  • 示例:06/15/1215 09:25:3.234

如果小数纳秒超过 7 位数,则将其舍入为 7 位数。 若要控制小数纳秒的显示,请打开“表”,在功能区上选择 “字段”,然后在“ 格式设置” 组中,选择“ 增加小数点按钮图像 ”或“ 减少小数点按钮图像 ”。

格式日期/时间和日期/时间扩展数据类型都使用类似的标准格式字符串,包括常规日期长日期中日期短日期长时间中时间和短时间,并且都支持自定义格式。 对于“日期/时间已延长”数据类型,基于时间的标准格式还支持纳秒的小数精度。 “日期/时间已延长”数据类型的格式默认为“常规日期”和“长时间”格式,并遵循“Windows 区域设置”中指定的选项。 还可通过使用“小数位数”属性指定小数点右边的数字位数 (1-7) 来控制小数精度的格式。

链接和导入还可以链接到具有相应数据类型的数据库或从其导入数据库,例如SQL Server datetime2 数据类型。 支持 SQL Server 2014 版或更高版本的数据库。 “日期/时间已延长”数据类型要求使用适用于 SQL Server 11 或更高版本的 Microsoft ODBC 驱动程序。 建议使用 Microsoft ODBC Driver 13.1 for SQL Server。 还支持使用 OLE DB。 有关详细信息,请参阅数据类型对 ODBC 日期和时间改进的支持和使用增强的日期和时间功能 (OLE DB)

窗体和报表 可以将“日期/时间扩展”数据类型添加到窗体或报表。 在表单中,可以使用日期选取器和输入掩码输入较大范围的日期,但不能输入纳秒的小数精度。

表达式支持 日期/时间扩展数据类型支持 SQL 聚合函数 和表达式计算。 例如,使用 LoggedDateTime 作为数据类型为“日期/时间已延长”的字段:

任务 示例 结果
查找最小值 Min(LoggedDateTime) 范围内的最早日期和时间
提取月份 Month(LoggedDateTime) 月份名称,如“一月”
添加一天 [LoggedDateTime]+1 星期二将变成星期三

返回页首

后向兼容性注意事项

“日期/时间已延长”数据类型与 Microsoft Access 的早期版本不兼容。 如果类型在本地 Access 表中使用,则不包含该功能的 Access 版本将无法打开数据库。

可以使用 “当前数据库 访问”选项 “支持链接/lmported 表的日期/时间扩展数据类型启用或禁用用于链接和导入操作的日期/时间扩展数据类型。 有关详细信息,请参阅设置当前数据库的用户选项

返回页首

在 VBA 中将“日期/时间已延长”数据类型用作字符串

下面的 VBA 示例使用 DAO 方法根据下表显示、输入“日期/时间已延长”数据类型并对其进行求值。

ID DTEData DTData
1 1/1/2 1:01:03.1234567 AM 1/1/2001

表名称: DTETable
ID 数据类型: 自动编号
DTEData 数据类型: 扩展日期/时间
DTData 数据类型: 日期/时间

示例:显示日期和时间

下面的示例显示日期和时间。 使用的格式为 24 小时制的 mm/dd/yyyy hh:mm:ss.nnnnnnn。 该格式不可自定义。


Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("DTETable")
Do Until rs.EOF
    Debug.Print rs!DTETable
    rs.MoveNext
Loop

结果 访问显示:01/01/0002 01:01:03.1234567。

示例:输入日期和时间

下面的示例使用字符串格式输入日期和时间。 支持所有标准日期和时间格式。


Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("DTETable")
With CurrentDb.OpenRecordset("DTETable")
    .AddNew
    ![DTEData] = "1/1/9999 1:1:1.0123 AM"
    ![DTData] = #1/1/2001#
    .Update
End With

结果 Access 添加新行 (ID = 2) :

ID DTEData DTData
1 1/1/2 1:01:03.1234567 AM 1/1/2001
2 1/1/9999 1:01:01.0123000 AM 1/1/2001

示例:查询表达式求值

下面的示例使用 Day 函数从日期和时间字段中提取日期。


Dim db As Database
Dim rs As Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("SELECT Day(DTEData) as day FROM DTETable")
Do Until rs.EOF
    Debug.Print "The day of the month is: "&rs!day
    rs.MoveNext
Loop

结果 Access 显示:

月份中的日期为:1
月份中的日期为:1

在查询表达式中处理日期/时间扩展的函数

以下函数适用于查询表达式中扩展的日期/时间:
​​​​​​​
Year、Month、Weekday、Day、Hour、Minute、Second、DateAdd、DateDiff 和 DatePart。

此外,某些函数的扩展版本无法使用参数类型来确定计算应生成 Date/Time Extended 值。 分别是:

DateValueExtended、TimeValueExtended、DateSerialExtended、TimeSerialExtended、NowExtended、DateExtended、DateTimeExtended 和 TimeExtended。

这些函数的工作方式与末尾没有“Extended”的函数相同,但返回日期/时间扩展值,而不是日期/时间值。

请注意,VBA 尚未修改,在 VBA 代码中无法识别新函数,并且现有函数不适用于日期/时间扩展值。

示例

原始查询:


Select DateValue([OrderDate]) AS OrderDateOnly_DateValue

, Format([OrderDate],"Short Date") AS OrderDateOnly_Format

From tblOrders

现在,将 DateValue ([OrderDate]) 更改为 DateValueExtended ([OrderDate]) ,这将修复第一个表达式。

请注意,Access 不处理日期/时间扩展列的 Format 函数;只需设置列的 Format 属性即可。

因此,如果使用:


SELECT DateValueExtended([OrderDate]) AS OrderDateOnly_DateValue, Table1.OrderDate

FROM Table1;

并将第二列的 Format 属性设置为“短日期”,你将获得所需的结果。

返回页首

另请参阅

数据类型和字段属性简介

设置日期和时间字段的格式

创建或删除日期和时间字段