2009-03-30 6 views
3

2003 VBA(使用しイミディエイトウィンドウ)VBA CDate関数は、SQL Server 2005のAccessで

? CDate(39870) 

戻り値変換(日時を、)と一致しませんSQL Server Management Studioの)

SELECT CONVERT(DATETIME, 39870) 

戻り値:2009-02-28 00:00:00.000

が、彼らは常に2によって異なるかあります私は行方不明のいくつかの他の日付設定?

Serverの照合順序SQL_Latin1_General_CP1_CI_AS =

答えて

6

異なる言語やシステムは、日付の異なる数値表現を使用しています。

SQL 2005は、1900年1月1日からの日数をカウントします。

SELECT CONVERT(DATETIME, 1) 
1900-01-02 00:00:00.000 

エクセルとアクセスVBAは、1899年12月30日からの日数を数える:

? CDate(1) 
12/31/1899 

その他カウント他の一見無作為な出発点からの日、秒、時にはミリ秒の数。私はMS DOSが1990年12月31日に使用されたと思う。UNIXは1/1/1970を使用する。

したがって、直接(数値的に)それを翻訳しようとしないでください。実際の日付表現(01-03-2009)に翻訳してから、他の環境に戻ってください。

編集:VBAには、下位互換性と閏年の計算に関するいくつかの面白い欠点があります。良い読み取りについては、Joel's first encounter with Bill Gatesを参照してください。

+0

MS DOSが1/1/1980 –

1

これらは異なる開始点を使用します。

アクセスが

1899年12月30日

でカウント日付を開始SQL Serverは、次の2つの日差を得る理由です1900/1/1

から始まります。

一般に、異なるシステム間で同じ内部表現を使用することはできません。