2009-03-30 5 views
3

In Access 2003 VBA (Verwendet Direkt-Fenster)VBA CDate Convert (Datetime,) in SQL Server 2005

? CDate(39870) 

Returns nicht überein SQL Server Management Studio)

SELECT CONVERT(DATETIME, 39870) 

Returns: 2009-02-28 00: 00: 00.000

unterscheiden sie sich immer von 2 oder gibt es eine andere Datumseinstellung fehlt mir?

Server-Sortierungs = SQL_Latin1_General_CP1_CI_AS

Antwort

6

Verschiedene Sprachen und Systeme verwenden unterschiedliche numerische Darstellungen von Terminen.

SQL 2005 zählt die Anzahl der Tage vom 1.1.1900:

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

Excel und Access VBA die Anzahl der Tage von 12/30/1899 zählen:

? CDate(1) 
12/31/1899 

Andere zählen die Anzahl von Tagen, Sekunden oder manchmal Millisekunden von einem anderen scheinbar zufälligen Startpunkt. Ich denke MS DOS verwendet am 31. Dezember 1990. UNIX verwendet 1/1/1970.

Also versuchen Sie nicht, sie direkt zu übersetzen (numerisch, das ist). Sie müssen in eine aktuelle Datumsrepräsentation (01-03-2009) und dann zurück in die andere Umgebung übersetzen.

Edit: VBA hat ein paar komische Macken über Rückwärtskompatibilität und Schaltjahr Berechnungen. Siehe Joel's first encounter with Bill Gates für eine gute Lektüre.

+0

MS DOS war 1/1/1980 –

1

Sie verwenden unterschiedliche Startpunkte.

Access gestartet Termine auf 12/30/1899

SQL Server zu zählen beginnt bei 1/1/1900

Das ist, warum Sie die 2 Tage Unterschied zu bekommen.

Im Allgemeinen können Sie sich nicht darauf verlassen, dass dieselbe interne Repräsentation über verschiedene Systeme hinweg verwendet wird.