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

Welche Bedeutung hat der 1.1.1753 in SQL Server?

Die Entscheidung, den 1. Januar 1753 zu verwenden (1753-01-01 ) als minimaler Datumswert für eine Datumszeit in SQL Server geht auf seine Sybase-Ursprünge zurück.

Die Bedeutung des Datums selbst kann jedoch diesem Mann zugeschrieben werden.

Philip Stanhope, 4. Graf von Chesterfield. Wer steuerte den Calendar (New Style) Act 1750 durch das britische Parlament. Dies führte zur Einführung des gregorianischen Kalenders für Großbritannien und seine damaligen Kolonien.

Es fehlten einige Tage (Link zum Internetarchiv) im britischen Kalender im Jahr 1752, als die Anpassung schließlich vom Julianischen Kalender vorgenommen wurde. 3. September 1752 bis 13. September 1752 gingen verloren.

Kalen Delaney erklärte die Wahl auf diese Weise

Wie können Sie also bei 12 verlorenen Tagen Daten berechnen? Wie können Sie beispielsweise die Anzahl der Tage zwischen dem 12. Oktober 1492 und dem 4. Juli 1776 berechnen? Schließen Sie die fehlenden 12 Tage ein? Um dieses Problem nicht lösen zu müssen, entschieden sich die ursprünglichen Sybase SQL Server-Entwickler, Datumsangaben vor 1753 nicht zuzulassen. Sie können frühere Daten mithilfe von Zeichenfeldern speichern, aber Sie können keine datetime-Funktionen mit den früheren Daten verwenden, die Sie in Zeichenfeldern speichern.

Die Wahl von 1753 scheint jedoch etwas anglozentrisch zu sein, da viele katholische Länder in Europa den Kalender 170 Jahre lang vor der britischen Einführung verwendet hatten (ursprünglich verzögert aufgrund des Widerstands der Kirche). Umgekehrt reformierten viele Länder ihre Kalender erst viel später, 1918 in Russland. Tatsächlich begann die Oktoberrevolution von 1917 am 7. November nach dem gregorianischen Kalender.

Sowohl datetime und das neue datetime2 Der in Joes Antwort erwähnte Datentyp versucht nicht, diese lokalen Unterschiede zu berücksichtigen, und verwendet einfach den gregorianischen Kalender.

Also mit dem größeren Bereich von datetime2

SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)

Rückgabe

Sep  8 1752 12:00AM

Ein letzter Punkt mit dem datetime2 Der Datentyp ist, dass er den proleptischen gregorianischen Kalender verwendet, der weit vor seiner eigentlichen Erfindung rückwärts projiziert wurde, so dass er im Umgang mit historischen Daten nur von begrenztem Nutzen ist.

Dies steht im Gegensatz zu anderen Softwareimplementierungen wie der Java-Gregorianischen Kalenderklasse, die standardmäßig dem Julianischen Kalender für Daten bis zum 4. Oktober 1582 folgt und dann im neuen Gregorianischen Kalender zum 15. Oktober 1582 springt. Es behandelt das julianische Modell des Schaltjahres vor diesem Datum und das gregorianische Modell nach diesem Datum korrekt. Das Umstellungsdatum kann vom Aufrufer geändert werden, indem er setGregorianChange() aufruft .

Einen recht unterhaltsamen Artikel über weitere Besonderheiten bei der Einführung des Kalenders finden Sie hier.