Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jakie jest znaczenie 1/1/1753 w SQL Server?

Decyzja o użyciu 1 stycznia 1753 (1753-01-01 ) jako minimalna wartość daty dla daty i godziny w SQL Server wraca do swoich początków Sybase.

Jednak znaczenie samej daty można przypisać temu człowiekowi.

Philip Stanhope, 4. hrabia Chesterfield. Kto kierował ustawą o kalendarzu (w nowym stylu) z 1750 r. za pośrednictwem brytyjskiego parlamentu. Ustanowiło to przyjęcie kalendarza gregoriańskiego dla Wielkiej Brytanii i jej ówczesnych kolonii.

Brakowało kilku dni (link do archiwum internetowego) w kalendarzu brytyjskim w 1752 roku, kiedy ostatecznie dokonano korekty z kalendarza juliańskiego. 3 września 1752 do 13 września 1752 zostały utracone.

Kalen Delaney wyjaśnił ten wybór w ten sposób

Tak więc, mając 12 dni straconych, jak możesz obliczyć daty? Na przykład, jak obliczyć liczbę dni między 12 października 1492 a 4 lipca 1776? Czy uwzględniasz te brakujące 12 dni? Aby uniknąć konieczności rozwiązania tego problemu, oryginalni programiści Sybase SQL Server postanowili nie zezwalać na daty sprzed 1753 roku. Wcześniejsze daty można przechowywać za pomocą pól znakowych, ale nie można używać żadnych funkcji daty/godziny z wcześniejszymi datami przechowywanymi w polach znakowych.

Wybór roku 1753 wydaje się jednak nieco anglocentryczny, jednak wiele krajów katolickich w Europie używało kalendarza przez 170 lat przed wprowadzeniem go w życie w Wielkiej Brytanii (pierwotnie opóźnionym z powodu sprzeciwu Kościoła). Odwrotnie, wiele krajów zreformowało swoje kalendarze dopiero znacznie później, w 1918 roku w Rosji. Rzeczywiście, Rewolucja Październikowa 1917 roku rozpoczęła się 7 listopada według kalendarza gregoriańskiego.

Oba datetime i nowy datetime2 typ danych wymieniony w odpowiedzi Joe nie próbuje uwzględniać tych lokalnych różnic i po prostu używa kalendarza gregoriańskiego.

Więc z większym zakresem datetime2

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

Zwroty

Sep  8 1752 12:00AM

Ostatni punkt z datetime2 typ danych polega na tym, że korzysta z proleptycznego kalendarza gregoriańskiego, który jest rzutowany wstecz na długo przed jego wynalezieniem, więc ma ograniczone zastosowanie w przypadku dat historycznych.

Kontrastuje to z innymi implementacjami oprogramowania, takimi jak klasa Java Gregorian Calendar, która domyślnie podąża za kalendarzem juliańskim dla dat do 4 października 1582, a następnie przeskakuje do 15 października 1582 w nowym kalendarzu gregoriańskim. Prawidłowo obsługuje model juliański dotyczący roku przestępnego przed tą datą i model gregoriański po tej dacie. Data odcięcia może zostać zmieniona przez dzwoniącego, wywołując setGregorianChange() .

Dość zabawny artykuł omawiający niektóre osobliwości związane z przyjęciem kalendarza można znaleźć tutaj.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Czy istnieje odpowiednik SELECT... INTO OUTFILE w SQL Server Management Studio?

  2. Zarządzanie indeksami SQL Server za pomocą Index Manager dla SQL Server

  3. Uzyskiwanie i instalacja Microsoft SQL Server Management Studio

  4. Jak usunąć wiodące i końcowe białe znaki w SQL Server — TRIM()

  5. Jak stworzyć wiele jeden do jednego