Концентрирайки се конкретно върху DATETIME, където прехвърлянията от int са разрешени, има две причини за несъответствието.
-
Excel използва база 1 за дати, SQL Server използва 0, т.е.
01/01/1900
когато се преобразува в число в excel е 1, но в SQL е 0:SELECT CAST(CAST('19000101' AS DATETIME) AS INT);
Ще даде 0. -
Има умишлена грешка в excel, за да се позволи преносимост от Lotus, където грешката не е умишлена*. Excel счита 29 февруари 1900 г. за валидна дата, но 1900 г. не е била високосна година. SQL няма този проблем, така че това означава, че има допълнителен ден в календара на Excel.
*(по-нататъшното четене на това предполага, че може да е било умишлено или да се счита за несъществено)
ДОБАВЛЕНИЕ
Има Елемент за поддръжка на Microsoft което гласи: