r语言 - 访问返回 1753 年之前不正确日期的 ODBC



使用 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字段类型定义为"介于 100 和 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知识库文章,内容涉及尝试插入 1753 年之前的日期时 Access ODBC 的问题。

1753-01-01 是 SQL Server 中DATETIME列类型的最早日期,这可能并非巧合。有关该日期重要性的更多详细信息,请参阅

1/1/1753 在 SQL Server 中的意义是什么?

Access 中只有一个Date/Time类型,因此我们无法将该值转换为类似于 SQL Server 中的DATETIME2值。因此,最好的解决方法可能是使用Format()将日期值转换为文本,如问题中所述。

还值得注意的是,Access OLEDB 提供程序 (Microsoft.ACE.OLEDB.12.0) 在 1753 年之前的日期上不会出现相同的问题。

最新更新