2016-06-11 8 views
1

R ODBCを使用してAccess 2016データベースに接続するときに奇妙な問題が発生しました。ODBCが1753年より前の不正な日付を返す

Rの日付は、Accessデータベースの日付を参照すると、-28日の差異があります。

たとえば、Access:1639-01-24; R:1638-12-27。 Rの日付の書式は "1638-12-27 LMT"です。私はFormat機能を持つ文字列として日付変数を取得しなければならなかった。この問題解決するために

:なぜこれが起こっている

Select format([date],'yyyy-mm-dd') ... 

は、誰かが説明できますか?

+0

に日付と同じ問題を示さないことは注目に値しますか?差は大きすぎます。もっと最近の日付(つまり20世紀)で起こること –

+0

あなたは正しいと思います!私はより最近の日付でチェックして、それは正しいです。 –

+0

しかし、17世紀と18世紀には、エラーがありますが、バリエーションがあります:1686年から16日、 1732年の6日間です。それは非常に奇妙です。 –

答えて

2

Accessのフィールドタイプが「100〜9999年の日付または時刻の値」(ref)として定義されているにもかかわらず、Access ODBCドライバは1753年1月1日より前の日付に問題があるようです。 RODBCと.NET System.Data.Odbcの両方でMicrosoft Access Driver (*.mdb, *.accdb)を使用していることを確認できました。 Accessで

1753-01-01(正しい)1753-01-01としてアクセスODBCによって返されますが、Accessで
1752-12-311752-12-30としてアクセスODBCによって返された(間違った)

と、あなたが発見したとして、不一致がほど大きくなるさ私たちは時間を追ってさらに前進します。

日付を挿入しようとすると、Access ODBCでの問題に関連するマイクロソフトサポート技術情報の記事hereもあり前1753

にそれは1753年1月1日は、のために可能な限り早期であることはおそらく偶然ではありませんSQL ServerのDATETIME列型です。私たちは、SQL ServerのDATETIME2のようなものに値を変換することはできませんアクセスで唯一Date/Timeタイプがあり

What is the significance of 1/1/1753 in SQL Server?

その日の重要性についての詳細は、以下を参照してください。したがって、最もよい回避策はおそらくFormat()を使用して、質問に記載されている日付値をテキストに変換することです。

これはグレゴリオ暦に関連している可能性がまたアクセスOLEDBプロバイダ(Microsoft.ACE.OLEDB.12.0が)前に1753

関連する問題