访问 ODBC 返回 1753 年之前的错误日期
Access ODBC returning incorrect dates prior to the year 1753
我在使用 R ODBC 连接到 Access 2016 数据库时遇到一个奇怪的问题。
R 中的日期与 Access 数据库中的日期相差 -28 天。
例如Access中:1639-01-24;在 R 中:1638-12-27。 R中日期的格式是“1638-12-27 LMT”。
为了解决这个问题,我必须使用 Format
函数将日期变量作为字符串获取:
Select format([date],'yyyy-mm-dd') ...
有人可以解释为什么会这样吗?
尽管 Access 中的 Date/Time
字段类型被定义为 "date or time value between the years 100 and 9999" (ref),但 Access ODBC 驱动程序在处理 1753 年 1 月 1 日之前的日期时似乎存在问题. 我能够确认在 RODBC 和 .NET System.Data.Odbc.
下使用 Microsoft Access Driver (*.mdb, *.accdb)
Access 中的 1753-01-01
由 Access ODBC 返回为 1753-01-01
(正确),但是
Access 中的 1752-12-31
由 Access ODBC 返回为 1752-12-30
(错误)
而且,正如您所发现的,随着时间的推移,差异会越来越大。
还有一篇 Microsoft 知识库文章 here 与尝试插入早于 1753 年的日期时 Access ODBC 的问题有关。
1753-01-01 是 SQL 服务器中 DATETIME
列类型的最早日期可能不是巧合。有关该日期意义的更多详细信息,请参阅
What is the significance of 1/1/1753 in SQL Server?
Access 中只有一种 Date/Time
类型,因此我们无法将值转换为 SQL 服务器中的 DATETIME2
之类的值。因此,最好的解决方法可能是使用 Format()
将日期值转换为问题中提到的文本。
还值得注意的是,Access OLEDB 提供程序 (Microsoft.ACE.OLEDB.12.0) 在 1753 年之前的日期没有出现同样的问题。
我在使用 R ODBC 连接到 Access 2016 数据库时遇到一个奇怪的问题。
R 中的日期与 Access 数据库中的日期相差 -28 天。
例如Access中:1639-01-24;在 R 中:1638-12-27。 R中日期的格式是“1638-12-27 LMT”。
为了解决这个问题,我必须使用 Format
函数将日期变量作为字符串获取:
Select format([date],'yyyy-mm-dd') ...
有人可以解释为什么会这样吗?
尽管 Access 中的 Date/Time
字段类型被定义为 "date or time value between the years 100 and 9999" (ref),但 Access ODBC 驱动程序在处理 1753 年 1 月 1 日之前的日期时似乎存在问题. 我能够确认在 RODBC 和 .NET System.Data.Odbc.
Microsoft Access Driver (*.mdb, *.accdb)
Access 中的 1753-01-01
由 Access ODBC 返回为 1753-01-01
(正确),但是
Access 中的 1752-12-31
由 Access ODBC 返回为 1752-12-30
(错误)
而且,正如您所发现的,随着时间的推移,差异会越来越大。
还有一篇 Microsoft 知识库文章 here 与尝试插入早于 1753 年的日期时 Access ODBC 的问题有关。
1753-01-01 是 SQL 服务器中 DATETIME
列类型的最早日期可能不是巧合。有关该日期意义的更多详细信息,请参阅
What is the significance of 1/1/1753 in SQL Server?
Access 中只有一种 Date/Time
类型,因此我们无法将值转换为 SQL 服务器中的 DATETIME2
之类的值。因此,最好的解决方法可能是使用 Format()
将日期值转换为问题中提到的文本。
还值得注意的是,Access OLEDB 提供程序 (Microsoft.ACE.OLEDB.12.0) 在 1753 年之前的日期没有出现同样的问题。