Konzentriert man sich speziell auf DATETIME, wo die Umwandlungen von int erlaubt sind, gibt es zwei Gründe für die Diskrepanz.
-
Excel verwendet eine Basis von 1 für Datumsangaben, SQL Server verwendet 0, d. h.
01/01/1900
Wenn es in Excel in eine Zahl konvertiert wird, ist es 1, in SQL ist es jedoch 0:SELECT CAST(CAST('19000101' AS DATETIME) AS INT);
Gibt 0. -
Es gibt einen absichtlichen Fehler in Excel, um die Übertragbarkeit von Lotus zu ermöglichen, wo der Fehler nicht absichtlich* war. Excel betrachtet den 29. Februar 1900 als gültiges Datum, aber 1900 war kein Schaltjahr. SQL hat dieses Problem nicht, das bedeutet also, dass es einen zusätzlichen Tag im Excel-Kalender gibt.
*(weitere Lektüre dazu deutet darauf hin, dass dies absichtlich oder als belanglos angesehen wurde)
NACHTRAG
Es gibt ein Microsoft Support Item das besagt: