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

Proč je 1899-12-30 nulové datum v Access / SQL Server místo 12/31?

Udržování kompatibility s Lotus 1-2-3 zpět v den, který měl chybu v tom, že rok 1900 byl považován za přestupný rok (nebo předstíraný?).

Vysvětlení je příliš dlouhé na citaci, ale pro zajímavost zde jsou některé úryvky.

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

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

1900 nebyl přestupný rok.

"Je to chyba v Excelu!" vykřikl jsem.

"No, vlastně ne," řekl Ed. "Museli jsme to udělat tímto způsobem, protože musíme být schopni importovat listy Lotus 123."

"Takže je to chyba v Lotusu 123?"

"Ano, ale pravděpodobně úmyslně. Lotus se musel vejít do 640 kB. To není moc paměti. Pokud ignorujete 1900, můžete zjistit, zda je daný rok přestupným rokem, pouhým pohledem na dva nejsprávnější bity." jsou nulové. To je opravdu rychlé a snadné. Kluci z Lotusu pravděpodobně usoudili, že není důležité se po ty dva měsíce v minulosti mýlit. Vypadá to, že kluci ze Basicu chtěli být o těch dvou měsících anální, a tak přesunuli epocha jednoho dne zpět."

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

Ve skutečnosti je toto číslo o jednu větší než skutečný počet dní. Je to proto, že Excel se chová, jako by existovalo datum 1900-Feb-29. To ne. Rok 1900 nebyl přestupným rokem (rok 2000 je přestupný). V Excelu je den po 28. únoru 1900 1900-29. Ve skutečnosti byl den po 28. únoru 1900 1. března 1900. To není "chyba". Ve skutečnosti je to záměrné. Excel funguje tímto způsobem, protože to byla skutečně chyba v Lotusu 123. Když byl Excel představen, měl 123 téměř celý trh s tabulkovým softwarem. Microsoft se rozhodl pokračovat v chybách Lotusu, aby byl plně kompatibilní. Uživatelé, kteří přešli ze 123 na Excel, by nemuseli provádět žádné změny ve svých datech. Pokud všechna vaše data budou později než 1. března 1900, nemělo by vás to znepokojovat.



  1. získat záznamy za poslední tři měsíce z tabulky

  2. Aktualizace dat Salesforce pomocí kurzoru SQL Server

  3. Příkazy DefType ve VBA:Temná strana zpětné kompatibility

  4. MySQL AUTO_INCREMENT se nevrací