intからのキャストが許可されているDATETIMEに特に集中すると、不一致の理由は2つあります。
-
Excelは日付に1を基数として使用し、SQL Serverは0を使用します。つまり、
01/01/1900
Excelで数値に変換すると1になりますが、SQLでは0になります。SELECT CAST(CAST('19000101' AS DATETIME) AS INT);
0を与えます。 -
バグが意図的ではなかったロータスからの移植性を可能にするために、Excelには意図的なエラーがあります*。 Excelは1900年2月29日を有効な日付と見なしますが、1900年はうるう年ではありませんでした。 SQLにはこの問題がないため、Excelカレンダーに1日余分にあることを意味します。
*(これについてさらに読むと、意図的であるか、重要でないと見なされている可能性があります)
補遺
Microsoftサポートアイテム があります その状態: