La décision d'utiliser le 1er janvier 1753 ( 1753-01-01
) comme la valeur minimale de la date pour une date dans le serveur SQL remonte à sa date d'origine. Origine de Sybase .
L'importance de la date elle-même peut cependant être attribuée à cet homme.
Philip Stanhope, 4ème comte de Chesterfield. Qui a dirigé le Loi de 1750 sur le calendrier (nouveau style) par le Parlement britannique. Cette loi prévoyait l'adoption du calendrier grégorien pour la Grande-Bretagne et ses colonies de l'époque.
Il y a eu quelques jours manquants (lien vers les archives internet) dans le calendrier britannique en 1752, lorsque l'ajustement du calendrier julien a finalement été effectué. Les dates du 3 septembre 1752 au 13 septembre 1752 ont été perdues.
Kalen Delaney a expliqué le choix de cette façon
Donc, avec 12 jours de perdus, comment pouvez-vous calculer les dates ? Par exemple, comment pouvez-vous calculer le nombre de jours entre le 12 octobre 1492 et le 4 juillet 1776 ? Est-ce que inclure les 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 avant 1753. Vous pouvez stocker des dates antérieures en utilisant des champs de caractères, mais vous ne pouvez pas utiliser de fonctions de date 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 en Europe utilisaient le calendrier depuis 170 ans avant la mise en œuvre britannique (initialement retardée en raison de l'opposition par l'église ). À l'inverse, de nombreux pays n'ont réformé leur calendrier que bien plus tard, en 1918 en Russie. En effet, la révolution d'octobre 1917 a débuté le 7 novembre sous le calendrier grégorien.
Les deux sites datetime
et le nouveau datetime2
mentionné dans La réponse de Joe ne tentent pas de tenir compte de ces différences locales et utilisent simplement le calendrier grégorien.
Donc, avec la plus grande gamme de datetime2
SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)
Renvoie à
Sep 8 1752 12:00AM
Un dernier point avec le datetime2
est qu'il utilise la fonction calendrier grégorien proleptique Il est donc d'une utilité limitée pour traiter des dates historiques.
Cela contraste avec d'autres implémentations logicielles telles que le système Java Calendrier grégorien 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. Elle gère correctement le modèle julien d'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 sur les particularités de l'adoption du calendrier. peuvent être trouvés ici .