Koncentrując się konkretnie na DATETIME, gdzie rzuty z int są dozwolone, istnieją dwa powody rozbieżności.
-
Excel używa podstawy 1 dla dat, SQL Server używa 0, tj.
01/01/1900
po konwersji na liczbę w Excelu wynosi 1, jednak w SQL jest to 0:SELECT CAST(CAST('19000101' AS DATETIME) AS INT);
Da 0. -
W programie Excel występuje celowy błąd, który umożliwia przenoszenie z Lotus, gdy błąd nie był celowy*. Excel uważa 29 lutego 1900 za prawidłową datę, ale 1900 nie był rokiem przestępnym. SQL nie ma tego problemu, więc oznacza to, że w kalendarzu programu Excel jest dodatkowy dzień.
*(dalsza lektura sugeruje, że mogło to być celowe lub uznane za nieistotne)
UZUPEŁNIENIE
Istnieje Element pomocy Microsoft to satysfakcjonujące: