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

Dlaczego 1899-12-30 jest datą zerową w programie Access/SQL Server zamiast 12/31?

Utrzymanie zgodności z Lotus 1-2-3 w tamtych czasach, który miał błąd polegający na tym, że uważał, że rok 1900 był rokiem przestępnym (lub udawanym?).

Wyjaśnienie jest zbyt długie, by je cytować, ale dla ciekawości przedstawiamy kilka fragmentów.

  • http://blogs.msdn.com/b/ericlippert/archive/2003/09/16/53013.aspx

  • http://www.joelonsoftware.com/items/2006/06/16.html

1900 nie był rokiem przestępnym.

„To błąd w programie Excel!” wykrzyknąłem.

— Cóż, niezupełnie — powiedział Ed. „Musieliśmy to zrobić w ten sposób, ponieważ musimy mieć możliwość importowania arkuszy programu Lotus 123”.

„Więc to błąd w Lotusie 123?”

„Tak, ale prawdopodobnie celowo. Lotus musiał zmieścić się w 640 KB. To nie jest dużo pamięci. Jeśli zignorujesz 1900, możesz dowiedzieć się, czy dany rok jest rokiem przestępnym, po prostu sprawdzając, czy dwa najbardziej po prawej stronie wynoszą zero. To naprawdę szybkie i łatwe. Faceci z Lotus prawdopodobnie uznali, że nie miało to znaczenia, jeśli chodzi o te dwa miesiące w przeszłości. Wygląda na to, że chłopaki z Basica chcieli być analnie o tych dwóch miesiącach, więc przenieśli epoka jeden dzień wstecz."

  • http://www.cpearson.com/excel/datetime.htm

W rzeczywistości ta liczba jest o jeden większa niż rzeczywista liczba dni. Dzieje się tak, ponieważ program Excel zachowuje się tak, jakby istniała data 1900-lut-29. To nie mialo miejsca. Rok 1900 nie był rokiem przestępnym (rok 2000 jest rokiem przestępnym). W Excelu dzień po 1900-28 lutego to 1900-29 lutego. W rzeczywistości dzień po 1900-28 lutego był 1900-Mar-1. To nie jest „błąd”. Rzeczywiście, jest to zgodne z projektem. Excel działa w ten sposób, ponieważ był to naprawdę błąd w Lotusie 123. Kiedy Excel został wprowadzony, 123 ma prawie cały rynek oprogramowania do arkuszy kalkulacyjnych. Microsoft zdecydował się kontynuować błąd Lotusa, aby zachować pełną kompatybilność. Użytkownicy, którzy przeszli z 123 do Excela, nie musieliby wprowadzać żadnych zmian w swoich danych. Tak długo, jak wszystkie twoje daty później niż 1900-1 marca, nie powinno to być problemem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Najlepszy odpowiednik IsInteger w SQL Server

  2. Zapytanie bardzo wolne w kodzie, ale szybkie w SSMS

  3. podziel alfa i numeryczne za pomocą sql

  4. SQL Server i luki w zabezpieczeniach Spectre/Meltdown

  5. Jak podzielić ciąg po określonym znaku w SQL Server i zaktualizować tę wartość do określonej kolumny?