Koncentrerer man sig specifikt om DATETIME, hvor castene fra int er tilladt, er der to årsager til uoverensstemmelsen.
-
Excel bruger en base på 1 for datoer, SQL Server bruger 0, dvs.
01/01/1900
når det konverteres til et tal i excel er 1, men i SQL er det 0:SELECT CAST(CAST('19000101' AS DATETIME) AS INT);
Vil give 0. -
Der er en bevidst fejl i Excel for at tillade portabilitet fra Lotus, hvor fejlen ikke var bevidst*. Excel betragter den 29. februar 1900 som en gyldig dato, men 1900 var ikke et skudår. SQL har ikke dette problem, så det betyder, at der er en ekstra dag i excel-kalenderen.
*(yderligere læsning om dette tyder på, at det kunne have været bevidst eller betragtet som uvæsentligt)
TILFØJELSE
Der er et Microsoft-supportelement der står: