En se concentrant spécifiquement sur DATETIME, où les conversions depuis int sont autorisées, il y a deux raisons à l'écart.
-
Excel utilise une base de 1 pour les dates, SQL Server utilise 0, c'est-à-dire
01/01/1900
lorsqu'il est converti en un nombre dans Excel est 1, cependant, en SQL c'est 0 :SELECT CAST(CAST('19000101' AS DATETIME) AS INT);
Donnera 0. -
Il y a une erreur délibérée dans Excel pour autoriser la portabilité depuis Lotus là où le bogue n'était pas délibéré*. Excel considère le 29 février 1900 comme une date valide, mais 1900 n'était pas une année bissextile. SQL n'a pas ce problème, cela signifie donc qu'il y a un jour supplémentaire dans le calendrier Excel.
*(une lecture plus approfondie à ce sujet suggère que cela aurait pu être délibéré ou considéré comme sans conséquence)
ADDENDA
Il existe un élément d'assistance Microsoft qui indique :