Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Защо 1899-12-30 е нулевата дата в Access / SQL Server вместо 12/31?

Поддържане на съвместимост с Lotus 1-2-3 навремето, което имаше грешка в това, че смяташе 1900 г. за високосна (или се преструваше?).

Обяснението е твърде дълго за цитиране, но за любопитство, ето някои откъси.

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

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

1900 г. не беше високосна.

„Това е грешка в Excel!“ възкликнах аз.

— Е, всъщност не — каза Ед. "Трябваше да го направим по този начин, защото трябва да можем да импортираме работни листове на Lotus 123."

„Значи, това е грешка в Lotus 123?“

„Да, но вероятно умишлено. Lotus трябваше да се побере в 640K. Това не е много памет. Ако игнорирате 1900, можете да разберете дали дадена година е високосна, само като погледнете дали най-десните два бита са нула. Това е наистина бързо и лесно. Момчетата от Lotus вероятно са решили, че няма значение да грешат за тези два месеца в миналото. Изглежда, че момчетата от Basic искаха да бъдат анален за тези два месеца, така че преместиха епоха един ден назад."

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

Всъщност това число е с един по-голямо от действителния брой дни. Това е така, защото Excel се държи така, сякаш съществува датата 1900-29 февруари. Не стана. 1900 година не беше високосна (2000 година е високосна). В Excel денят след 1900-28 февруари е 1900-29 февруари. В действителност денят след 1900-28 февруари беше 1 март 1900 г. Това не е "бъг". Всъщност това е по проект. Excel работи по този начин, защото наистина беше грешка в Lotus 123. Когато Excel беше представен, 123 имаше почти целия пазар за софтуер за електронни таблици. Microsoft реши да продължи грешката на Lotus, за да бъде напълно съвместим. Потребителите, които преминаха от 123 към Excel, няма да трябва да правят промени в данните си. Докато всичките ви дати са по-късно от 1900-1 март, това не би трябвало да ви притеснява.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server:Филтрирайте изхода на sp_who2

  2. SQL замества всички NULL

  3. Лоши навици:Избягване на NULL в SQL Server

  4. Вземете информация за изглед с изгледа на информационна схема VIEWS в SQL Server

  5. SET срещу SELECT при присвояване на променливи?