Randolph West covers the internals of how date and time data types are stored in SQL Server:
DATE
is the byte-reversed number of days since the year 0001-01-01, stored as three bytes. It goes up to 9999-12-31, which is stored as0xDAB937
. You can check this value by reversing the bytes and sticking them into a hex calculator.37 B9 DA
equals 3,652,058, which is the number of days since 0001-01-01.If you try to cast
0xDBB937
as aDATE
value (by incrementing the least significant bitDA
by 1), it will throw a conversion error. There is obviously some overflow detection that protects against corruption in a date type.
Randolph looks at DATE
, TIME
, DATETIME(2)
, and DATETIME
and explains how each is storedon a page.