“日期/时间已延长”数据类型存储日期和时间信息,与“日期/时间”数据类型类似,但是它提供更大的日期范围、更高的小数精度并且与 SQL Server datetime2 日期类型兼容。 当你将 Access 数据导入或链接到 SQL Server 时,可以一致地将 Access“日期/时间已延长”字段映射到 SQL Server datetime2 列。 有关详细信息,请参阅 datetime2 (Transact-SQL)。
警告 当你基于 Access 中的“日期/时间已延长”数据类型创建表达式并使用日期/时间函数时,可能会失去计算精度或遇到其他问题。 我们已经意识到此问题,并计划在即将发布的版本中更好地支持表达式和函数。 解决方法是,你可以创建一个传递查询来使用等效的 SQL Server 表达式和日期/时间函数。 有关详细信息,请参阅将 Access SQL 与 SQL Server TSQL 进行比较。
本文内容
比较“日期/时间”和“日期/时间已延长”数据类型
下表总结了两种数据类型之间的重要差异。
属性 |
日期/时间 |
日期/时间已延长 |
---|---|---|
最小值 |
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 驱动程序。 建议使用适用于 SQL Server 的 Microsoft ODBC Driver 13.1。 还支持使用 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 数据类型: Autonumber 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
结果 Access 将显示: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