Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Was ist die Spezifikation des hexadezimalen Datumsformats in SQL Server?

Das DATE Typ wird intern als 3-Byte-Ganzzahl gespeichert, die die Anzahl der Tage seit dem 1. Januar 0001 darstellt.

Der Hex-Wert, den Sie haben, ist im Little-Endian-Format, also müssen Sie ihn in Big-Endian umwandeln, bevor Sie ihn in C# DateTime verwenden können Berechnungen:

string hexString = "38320B00";

// convert the first 6 characters to bytes and combine them into an int
// we can ignore the final two characters because the DATE type is a
// 3-byte integer - the most-significant-byte should always be zero
int days = byte.Parse(hexString.Substring(0, 2), NumberStyles.HexNumber)
    | byte.Parse(hexString.Substring(2, 2), NumberStyles.HexNumber) << 8
    | byte.Parse(hexString.Substring(4, 2), NumberStyles.HexNumber) << 16;

DateTime dt = new DateTime(1, 1, 1).AddDays(days);

Console.WriteLine(dt);    // 12/12/2009 00:00:00