6

Was ist die zugrunde liegende Datenstruktur von Datetime-Werten, die in SQL Server gespeichert sind (2000 und 2005, falls unterschiedlich)? Dh bis auf die Byte-Darstellung?Was ist die interne Darstellung von Datetime in SQL Server?

Vermutlich ist die Standarddarstellung, die Sie erhalten, wenn Sie eine Datetime-Spalte auswählen, ein kulturspezifischer Wert/zu ändernder Gegenstand. Das heißt, einige zugrunde liegende Strukturen, die wir nicht sehen, werden auf JJJJ-MM-TT HH: MM: SS.mmm formatiert.

Grund Ich frage ist, dass es eine allgemein gehaltene Ansicht in meiner Abteilung ist, dass es im Speicher buchstäblich als JJJJ-MM-TT gespeichert ist HH: MM: SS.mmm aber ich bin mir sicher, dass dies nicht der Fall ist.

Antwort

11

Es ist stored as an 8 byte field, fähig zu einer Strecke von 1753-01-01 bis 9999-12-31, genau zu 0.00333 Sekunden.

Die ersten 4 Bytes speichern die Anzahl der Tage seit dem SQL Server Epoche (1. JANUAR: die folgenden

Die Details sind angeblich undurchsichtigen, aber die meisten Ressourcen (1), (2), die ich im Web Zustand gefunden haben 1900) und dass die zweiten 4 Bytes die Anzahl der Ticks nach Mitternacht speichern, wobei ein "Tick" 3,3 Millisekunden ist.

Die ersten vier Bytes sind signiert (können positiv oder negativ sein), was erklärt, warum Daten früher als die Epoche dargestellt werden können.

+7

Das ist nicht korrekt. Aus dem verlinkten Artikel: Tatsächlich speichert SQL Server dort die Uhr-Ticks seit Mitternacht. Jeder Takt entspricht 3,33 Millisekunden. Das ist auch der Grund, warum der DATETIME-Datentyp eine Genauigkeit von einer dreihundertstel Sekunde hat. Dies ist wiederum korrekt in BOL angegeben. – ctusch

+1

@ctusch, Ich habe die Antwort aktualisiert (nach fast 7 Jahren!), Um die Größe der "Ticks" zu korrigieren. –

+0

Interessanterweise verwendet die SQL Server-Dokumentation den Begriff "Genauigkeit". Es sollte * sagen "Präzision". –

Verwandte Themen