访问ODBC返回1753年之前的错误日期

时间:2016-06-11 22:34:49

标签: r date ms-access odbc ms-access-2016

使用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') ...

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:2)

尽管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(错误)

并且,正如您所发现的那样,随着时间的推移,差异会变得更大。

在尝试在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年之前的日期没有出现同样的问题。