Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Quelle est la signification de 1/1/1753 dans SQL Server ?

La décision d'utiliser le 1er janvier 1753 (1753-01-01 ) car la valeur de date minimale pour une date/heure dans SQL Server remonte à ses origines Sybase.

L'importance de la date elle-même peut cependant être attribuée à cet homme.

Philip Stanhope, 4e comte de Chesterfield. Qui a dirigé le Calendar (New Style) Act 1750 par le Parlement britannique. Cela a légiféré pour l'adoption du calendrier grégorien pour la Grande-Bretagne et ses colonies d'alors.

Il manquait quelques jours (lien vers l'archive internet) dans le calendrier britannique en 1752 lorsque l'ajustement a finalement été effectué à partir du calendrier julien. 3 septembre 1752 au 13 septembre 1752 ont été perdus.

Kalen Delaney a expliqué le choix de cette façon

Alors, avec 12 jours perdus, comment calculer les dates ? Par exemple, comment pouvez-vous calculer le nombre de jours entre le 12 octobre 1492 et le 4 juillet 1776 ? Incluez-vous ces 12 jours manquants ? Pour éviter d'avoir à résoudre ce problème, les développeurs originaux de Sybase SQL Server ont décidé de ne pas autoriser les dates antérieures à 1753. Vous pouvez stocker des dates antérieures en utilisant des champs de caractères, mais vous ne pouvez utiliser aucune fonction date/heure avec les dates antérieures que vous stockez dans des champs de caractères.

Le choix de 1753 semble cependant quelque peu anglocentrique, car de nombreux pays catholiques d'Europe utilisaient le calendrier depuis 170 ans avant la mise en œuvre britannique (retardée à l'origine en raison de l'opposition de l'église). A l'inverse de nombreux pays n'ont réformé leurs calendriers que bien plus tard, 1918 en Russie. En effet, la Révolution d'Octobre 1917 a commencé le 7 novembre sous le calendrier grégorien.

Les deux datetime et le nouveau datetime2 type de données mentionné dans la réponse de Joe n'essayez pas de tenir compte de ces différences locales et utilisez simplement le calendrier grégorien.

Donc, avec la plus grande plage de datetime2

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

Retours

Sep  8 1752 12:00AM

Un dernier point avec le datetime2 type de données est qu'il utilise le calendrier grégorien proleptique projeté en arrière bien avant son invention, il est donc d'une utilité limitée pour traiter les dates historiques.

Cela contraste avec d'autres implémentations logicielles telles que la classe Java Gregorian Calendar qui suit par défaut le calendrier julien pour les dates jusqu'au 4 octobre 1582, puis saute au 15 octobre 1582 dans le nouveau calendrier grégorien. Il gère correctement le modèle julien de l'année bissextile avant cette date et le modèle grégorien après cette date. La date de basculement peut être modifiée par l'appelant en appelant setGregorianChange() .

Un article assez divertissant discutant de quelques particularités supplémentaires avec l'adoption du calendrier peut être trouvé ici.