Quyết định sử dụng ngày 1 tháng 1 năm 1753 (1753-01-01
) là giá trị ngày tối thiểu cho ngày giờ trong SQL Server quay trở lại nguồn gốc Sybase của nó.
Mặc dù vậy, tầm quan trọng của ngày tháng có thể được quy cho người đàn ông này.
Philip Stanhope, Bá tước thứ 4 của Chesterfield. Người đã chỉ đạo Đạo luật Lịch (Phong cách Mới) 1750 thông qua Quốc hội Anh. Điều này đã lập pháp cho việc thông qua lịch Gregory cho Anh và các thuộc địa sau đó của nó.
Đã thiếu một số ngày (liên kết lưu trữ trên internet) trong lịch Anh vào năm 1752 khi việc điều chỉnh cuối cùng được thực hiện từ lịch Julian. Ngày 3 tháng 9 năm 1752 đến ngày 13 tháng 9 năm 1752 thì mất.
Kalen Delaney giải thích sự lựa chọn theo cách này
Vì vậy, với 12 ngày bị mất, làm thế nào bạn có thể tính toán ngày? Ví dụ:làm cách nào bạn có thể tính toán số ngày từ 12 tháng 10 năm 1492 đến ngày 4 tháng 7 năm 1776? Bạn có bao gồm 12 ngày mất tích đó không? Để tránh phải giải quyết vấn đề này, các nhà phát triển Sybase SQL Serverdevelopers ban đầu đã quyết định không cho phép các ngày trước năm 1753. Bạn có thể lưu trữ các ngày trước đó bằng cách sử dụng các trường ký tự, nhưng bạn không thể sử dụng bất kỳ hàm datetime nào với các ngày trước đó mà bạn lưu trữ các trường ký tự.
Tuy nhiên, sự lựa chọn năm 1753 có vẻ hơi phản cảm vì nhiều quốc gia công giáo ở châu Âu đã sử dụng lịch trong 170 năm trước khi người Anh thực hiện (ban đầu bị trì hoãn do nhà thờ phản đối). Ngược lại, nhiều quốc gia đã không cải cách lịch của họ cho đến rất lâu sau đó, năm 1918 ở Nga. Thật vậy, Cách mạng Tháng Mười năm 1917 bắt đầu vào ngày 7 tháng 11 theo lịch Gregory.
Cả datetime
và datetime2
mới loại dữ liệu được đề cập trong câu trả lời của Joe không cố gắng giải thích cho những khác biệt cục bộ này và chỉ sử dụng Lịch Gregorian.
Vì vậy, với phạm vi lớn hơn của datetime2
SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)
Trả lại
Sep 8 1752 12:00AM
Một điểm cuối cùng với datetime2
kiểu dữ liệu là nó sử dụng lịch Gregory sơ khai được chiếu ngược lại từ trước khi nó thực sự được phát minh, vì vậy nó chỉ được sử dụng hạn chế trong việc xử lý các ngày lịch sử.
Điều này trái ngược với các triển khai Phần mềm khác, chẳng hạn như lớp Lịch Gregorian của Java, mặc định tuân theo Lịch Julian cho các ngày cho đến ngày 4 tháng 10 năm 1582, sau đó chuyển sang ngày 15 tháng 10 năm 1582 trong lịch Gregory mới. Nó xử lý chính xác mô hình Julian của năm nhuận trước ngày đó và mô hình Gregorian sau ngày đó. Người gọi có thể thay đổi ngày giới hạn bằng cách gọi setGregorianChange()
.
Bạn có thể tìm thấy một bài viết khá thú vị thảo luận về một số đặc thù khác của việc áp dụng lịch tại đây.