sql >> Database teknologi >  >> RDS >> Sqlserver

Hvad er betydningen af ​​1/1/1753 i SQL Server?

Beslutningen om at bruge 1. januar 1753 (1753-01-01 ) da minimumsdatoværdien for en datetime i SQL Server går tilbage til dens Sybase-oprindelse.

Betydningen af ​​selve datoen kan dog tilskrives denne mand.

Philip Stanhope, 4. jarl af Chesterfield. Hvem styrede Calendar (New Style) Act 1750 gennem det britiske parlament. Dette lovede vedtagelsen af ​​den gregorianske kalender for Storbritannien og dets daværende kolonier.

Der manglede nogle dage (internetarkivlink) i den britiske kalender i 1752, da justeringen endelig blev foretaget fra den julianske kalender. 3. september 1752 til 13. september 1752 gik tabt.

Kalen Delaney forklarede valget på denne måde

Så med 12 dage tabt, hvordan kan du beregne datoer? Hvordan kan du for eksempel beregne antallet af dage mellem 12. oktober 1492 og 4. juli 1776? Inkluderer du dem, der mangler 12 dage? For at undgå at skulle løse dette problem, besluttede de oprindelige Sybase SQL Server-udviklere ikke at tillade datoer før 1753. Du kan gemme tidligere datoer ved at bruge tegnfelter, men du kan ikke bruge nogen datotidsfunktioner med de tidligere datoer, som du gemmer i tegnfelter.

Valget af 1753 virker dog noget anglocentrisk, da mange katolske lande i Europa havde brugt kalenderen i 170 år før den britiske implementering (oprindeligt forsinket på grund af modstand fra kirken). Omvendt reformerede mange lande ikke deres kalendere før meget senere, 1918 i Rusland. Faktisk startede oktoberrevolutionen i 1917 den 7. november under den gregorianske kalender.

Begge datetime og den nye datetime2 datatype nævnt i Joe's svar forsøger ikke at tage højde for disse lokale forskelle og brug blot den gregorianske kalender.

Så med det større udvalg af datetime2

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

Returnerer

Sep  8 1752 12:00AM

Et sidste punkt med datetime2 datatypen er, at den bruger den proleptiske gregorianske kalender, der er projiceret tilbage til et godt stykke tid før den faktisk blev opfundet, så den er af begrænset brug i forhold til historiske datoer.

Dette står i kontrast til andre softwareimplementeringer, såsom Java Gregorian Calendar-klassen, som som standard følger den julianske kalender for datoer indtil 4. oktober 1582 og derefter hopper til 15. oktober 1582 i den nye gregorianske kalender. Den håndterer korrekt den julianske model af skudår før denne dato og den gregorianske model efter denne dato. Afbrydelsesdatoen kan ændres af den, der ringer ved at kalde setGregorianChange() .

En ret underholdende artikel, der diskuterer nogle flere ejendommeligheder med vedtagelsen af ​​kalenderen, kan findes her.



  1. BeanCreationException:Fejl ved oprettelse af bean med navnet 'flywayInitializer'

  2. MySQL pivottabelforespørgsel med dynamiske kolonner

  3. Sådan forankres/ophæves forespørgsel til Windows og andre faner i SQL Server Management Studio ( SSMS) - SQL Server / TSQL vejledning del 21

  4. En introduktion til data mining