Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Tại sao 1899-12-30 là ngày 0 trong Access / SQL Server thay vì 12/31?

Duy trì khả năng tương thích với Lotus 1-2-3 trước đây, có một lỗi ở chỗ nó cho rằng năm 1900 là một năm nhuận (hoặc giả vờ?).

Giải thích quá dài để trích dẫn, nhưng vì sự tò mò, đây là một số đoạn trích.

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

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

Năm 1900 không phải là một năm nhuận.

"Đó là một lỗi trong Excel!" Tôi thốt lên.

"Chà, không hẳn," Ed nói. "Chúng tôi phải làm theo cách đó vì chúng tôi cần có thể nhập trang tính Lotus 123".

"Vì vậy, đó là một lỗi trong Lotus 123?"

"Đúng vậy, nhưng có lẽ là do cố ý. Lotus phải vừa với 640K. Đó không phải là nhiều bộ nhớ. Nếu bạn bỏ qua năm 1900, bạn có thể biết một năm nhất định có phải là năm nhuận hay không chỉ bằng cách xem liệu hai bit ngoài cùng bên phải không bằng không. Điều đó thực sự nhanh chóng và dễ dàng. Các chàng trai của Lotus có lẽ đã nhận ra rằng không có vấn đề gì sai trong hai tháng đó trong quá khứ. Có vẻ như các chàng trai Cơ bản muốn rút lui về hai tháng đó, vì vậy họ đã chuyển kỷ nguyên một ngày trở lại. "

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

Trên thực tế, con số này lớn hơn một ngày so với số ngày thực tế. Điều này là do Excel hoạt động như thể ngày 1900-29 tháng 2 tồn tại. Nó đã không làm. Năm 1900 không phải là năm nhuận (năm 2000 là năm nhuận). Trong Excel, ngày sau 1900-28 tháng 2 là 1900-29 tháng 2. Trên thực tế, ngày sau 1900-28 tháng 2 là 1900-Mar-1. Đây không phải là một lỗi". Thật vậy, đó là do thiết kế. Excel hoạt động theo cách này vì nó thực sự là một lỗi trong Lotus 123. Khi Excel được giới thiệu, 123 có gần như toàn bộ thị trường phần mềm bảng tính. Microsoft đã quyết định tiếp tục sửa lỗi của Lotus để tương thích hoàn toàn. Người dùng chuyển từ 123 sang Excel sẽ không phải thực hiện bất kỳ thay đổi nào đối với dữ liệu của họ. Miễn là tất cả các ngày của bạn muộn hơn 1900-tháng 3-1, điều này sẽ không có gì đáng lo ngại.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nén một phân vùng cụ thể trong một bảng trong SQL Server (T-SQL)

  2. Làm cách nào để chuyển XML từ C # sang một thủ tục được lưu trữ trong SQL Server 2008?

  3. Phương pháp tốt nhất để truyền các tham số cho SQLCommand là gì?

  4. Kết nối SQL Server với cơ sở dữ liệu Java

  5. Chẩn đoán bế tắc trong SQL Server 2005