Koncentrerar man sig specifikt på DATETIME, där casts från int är tillåtna, det finns två anledningar till avvikelsen.
-
Excel använder basen 1 för datum, SQL Server använder 0, dvs
01/01/1900
när det konverteras till ett tal i excel är 1, men i SQL är det 0:SELECT CAST(CAST('19000101' AS DATETIME) AS INT);
Ger 0. -
Det finns ett avsiktligt fel i Excel för att tillåta portabilitet från Lotus där felet inte var avsiktligt*. Excel betraktar den 29 februari 1900 som ett giltigt datum, men 1900 var inte ett skottår. SQL har inte detta problem, så det betyder att det finns en extra dag i excel-kalendern.
*(vidare läsning om detta tyder på att det kan ha varit avsiktligt eller ansett vara oviktigt)
TILLÄGG
Det finns ett Microsoft Support Item som säger: