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