sql >> Databáze >  >> RDS >> Sqlserver

Jaký je význam 1/1/1753 v SQL Server?

Rozhodnutí použít 1. ledna 1753 (1753-01-01 ), protože minimální hodnota data pro datum a čas na serveru SQL Server se vrací k jeho kořenům Sybase.

Význam samotného data však lze připsat tomuto muži.

Philip Stanhope, 4. hrabě z Chesterfieldu. Kdo řídil zákon o kalendáři (nový styl) z roku 1750 v britském parlamentu. To uzákonilo přijetí gregoriánského kalendáře pro Británii a její tehdejší kolonie.

Chybělo několik dní (odkaz na internetový archiv) v britském kalendáři v roce 1752, kdy byla konečně provedena úprava z juliánského kalendáře. 3. září 1752 až 13. září 1752 byly ztraceny.

Kalen Delaney vysvětlil výběr tímto způsobem

Jak tedy můžete spočítat data, když jste ztratili 12 dní? Jak můžete například vypočítat počet dní mezi 12. říjnem 1492 a 4. červencem 1776? Započítáte těch chybějících 12 dní? Aby se tento problém nemusel řešit, rozhodli se původní vývojáři Sybase SQL Server nepovolit data před rokem 1753. Starší data můžete uložit pomocí znakových polí, ale nemůžete použít žádné funkce data a času s dřívějšími daty, která ukládáte do znakových polí.

Volba roku 1753 se zdá poněkud anglocentrická, nicméně mnoho katolických zemí v Evropě používalo kalendář 170 let před britskou implementací (původně opožděno kvůli odporu církve). Naopak mnoho zemí reformovalo své kalendáře až mnohem později, v roce 1918 v Rusku. Říjnová revoluce v roce 1917 skutečně začala 7. listopadu podle gregoriánského kalendáře.

Oba datetime a nový datetime2 datový typ zmíněný v Joeově odpovědi se nepokouší zohlednit tyto místní rozdíly a jednoduše použije Gregoriánský kalendář.

Tedy s větším rozsahem datetime2

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

Vrátí

Sep  8 1752 12:00AM

Poslední bod s datetime2 datový typ spočívá v tom, že používá proleptický gregoriánský kalendář promítnutý zpětně dlouho předtím, než byl skutečně vynalezen, takže má omezené použití při práci s historickými daty.

To je v kontrastu s jinými implementacemi softwaru, jako je třída Java Gregorian Calendar, která se standardně řídí podle juliánského kalendáře pro data do 4. října 1582 a poté skočí na 15. října 1582 v novém gregoriánském kalendáři. Správně zpracovává juliánský model přestupného roku před tímto datem a gregoriánský model po tomto datu. Datum přerušení může volající změnit voláním setGregorianChange() .

Poměrně zábavný článek pojednávající o některých dalších zvláštnostech s přijetím kalendáře naleznete zde.



  1. Jak vypočítat věk (v letech) na základě data narození a getDate()

  2. Děkujeme, Amazon, že jste nás inspirovali k poskytování lepšího DBaaS:SkySQL

  3. Přístupy ke shardování MySQL?

  4. Nezanedbatelný rozdíl v prováděcím plánu oproti Oracle při použití jdbc Timestamp nebo Date