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