sql >> Database >  >> RDS >> Sqlserver

Wat is de betekenis van 1/1/1753 in SQL Server?

De beslissing om 1 januari 1753 te gebruiken (1753-01-01 ) aangezien de minimale datumwaarde voor een datetime in SQL Server teruggaat naar de Sybase-oorsprong.

De betekenis van de datum zelf kan echter aan deze man worden toegeschreven.

Philip Stanhope, 4de Graaf van Chesterfield. Wie stuurde de Calendar (New Style) Act 1750 door het Britse parlement. Dit zorgde voor de goedkeuring van de Gregoriaanse kalender voor Groot-Brittannië en zijn toenmalige koloniën.

Er waren enkele ontbrekende dagen (link naar internetarchief) in de Britse kalender in 1752 toen de aanpassing uiteindelijk werd gemaakt van de Juliaanse kalender. 3 september 1752 tot 13 september 1752 gingen verloren.

Kalen Delaney legde de keuze op deze manier uit

Dus, met 12 verloren dagen, hoe kun je datums berekenen? Hoe kun je bijvoorbeeld het aantal dagen berekenen tussen 12 oktober 1492 en 4 juli 1776? Telt u de ontbrekende 12 dagen mee? Om dit probleem te voorkomen, hebben de oorspronkelijke ontwikkelaars van Sybase SQL Server besloten datums vóór 1753 niet toe te staan. U kunt eerdere datums opslaan door tekenvelden te gebruiken, maar u kunt geen datetime-functies gebruiken met de eerdere datums die u opslaat in tekenvelden.

De keuze voor 1753 lijkt echter enigszins anglocentrisch, aangezien veel katholieke landen in Europa de kalender al 170 jaar gebruikten vóór de Britse implementatie (oorspronkelijk vertraagd vanwege oppositie van de kerk). Omgekeerd hervormden veel landen hun kalenders pas veel later, 1918 in Rusland. De Oktoberrevolutie van 1917 begon inderdaad op 7 november volgens de Gregoriaanse kalender.

Beide datetime en de nieuwe datetime2 datatype genoemd in Joe's antwoord, probeer deze lokale verschillen niet te verklaren en gebruik gewoon de Gregoriaanse kalender.

Dus met het grotere bereik van datetime2

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

Retourneren

Sep  8 1752 12:00AM

Een laatste punt met de datetime2 gegevenstype is dat het de proleptische Gregoriaanse kalender gebruikt die achteruit is geprojecteerd tot ver voordat het daadwerkelijk werd uitgevonden, dus het is van beperkt nut bij het omgaan met historische data.

Dit in tegenstelling tot andere software-implementaties, zoals de Java-klasse Gregoriaanse kalender die standaard de Juliaanse kalender volgt voor datums tot 4 oktober 1582 en vervolgens springt naar 15 oktober 1582 in de nieuwe Gregoriaanse kalender. Het behandelt correct het Juliaanse model van een schrikkeljaar vóór die datum en het Gregoriaanse model na die datum. De overgangsdatum kan door de beller worden gewijzigd door setGregorianChange() . te bellen .

Een redelijk vermakelijk artikel waarin enkele eigenaardigheden met de invoering van de kalender worden besproken, is hier te vinden.



  1. SqlBulkCopy invoegen met identiteitskolom

  2. Schakel alle tabelbeperkingen in Oracle uit

  3. Hoe schrijf je een hoofdletterongevoelige query voor zowel MySQL als Postgres?

  4. Is de Sql Server Unique Key ook een Index?