sql >> Databasteknik >  >> RDS >> Sqlserver

Vad är betydelsen av 1/1/1753 i SQL Server?

Beslutet att använda 1 januari 1753 (1753-01-01 ) eftersom det lägsta datumvärdet för en datetime i SQL Server går tillbaka till dess Sybase-ursprung.

Betydelsen av själva datumet kan dock tillskrivas den här mannen.

Philip Stanhope, 4:e earlen av Chesterfield. Som styrde Calendar (New Style) Act 1750 genom det brittiska parlamentet. Detta lagstiftade för antagandet av den gregorianska kalendern för Storbritannien och dess dåvarande kolonier.

Det saknades några dagar (internetarkivlänk) i den brittiska kalendern 1752 när justeringen slutligen gjordes från den julianska kalendern. 3 september 1752 till 13 september 1752 gick förlorade.

Kalen Delaney förklarade valet så här

Så, med 12 dagar förlorade, hur kan du beräkna datum? Hur kan du till exempel beräkna antalet dagar mellan 12 oktober 1492 och 4 juli 1776? Inkluderar du de som saknar 12 dagar? För att undvika att behöva lösa det här problemet beslutade de ursprungliga Sybase SQL Server-utvecklarna att inte tillåta datum före 1753. Du kan lagra tidigare datum genom att använda teckenfält, men du kan inte använda några datumtidsfunktioner med de tidigare datumen som du lagrar i teckenfält.

Valet av 1753 verkar dock något anglocentriskt eftersom många katolska länder i Europa hade använt kalendern i 170 år innan den brittiska implementeringen (ursprungligen försenad på grund av motstånd från kyrkan). Omvänt reformerade många länder inte sina kalendrar förrän långt senare, 1918 i Ryssland. Oktoberrevolutionen 1917 började faktiskt den 7 november enligt den gregorianska kalendern.

Båda datetime och den nya datetime2 datatypen som nämns i Joes svar försöker inte ta hänsyn till dessa lokala skillnader utan använder helt enkelt den gregorianska kalendern.

Så med det större intervallet datetime2

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

Retur

Sep  8 1752 12:00AM

En sista punkt med datetime2 datatypen är att den använder den proleptiska gregorianska kalendern som projiceras bakåt till långt innan den faktiskt uppfanns, så den är av begränsad användning när det gäller historiska datum.

Detta står i kontrast till andra programvaruimplementeringar som Java Gregorian Calendar-klassen som som standard följer den julianska kalendern för datum fram till 4 oktober 1582 och sedan hoppar till 15 oktober 1582 i den nya gregorianska kalendern. Den hanterar korrekt den julianska modellen av skottår före detta datum och den gregorianska modellen efter detta datum. Uppringningsdatumet kan ändras av den som ringer genom att anropa setGregorianChange() .

En ganska underhållande artikel som diskuterar några fler särdrag med antagandet av kalendern finns här.



  1. BILAGA sqlite-databas i Android med SQLiteOpenHelper

  2. Komprimera en specifik partition i en tabell i SQL Server (T-SQL)

  3. Vad är användningen av GO i SQL Server Management Studio &Transact SQL?

  4. Hitta och ta bort icke-ASCII-tecken från en Oracle Varchar2