A decisão de usar 1º de janeiro de 1753 (
1753-01-01
) como o valor de data mínimo para um datetime no SQL Server volta para suas origens Sybase. O significado da data em si, porém, pode ser atribuído a este homem.
Philip Stanhope, 4º Conde de Chesterfield. Quem dirigiu a Lei do Calendário (Novo Estilo) de 1750 através do Parlamento Britânico. Este legislou para a adoção do calendário gregoriano para a Grã-Bretanha e suas então colônias.
Faltaram alguns dias (link do arquivo da internet) no calendário britânico em 1752, quando o ajuste foi finalmente feito a partir do calendário juliano. 3 de setembro de 1752 a 13 de setembro de 1752 foram perdidos.
Kalen Delaney explicou a escolha desta forma
Então, com 12 dias perdidos, como você pode calcular as datas? Por exemplo, como você pode calcular o número de dias entre 12 de outubro de 1492 e 4 de julho de 1776? Você inclui aqueles que faltam 12 dias? Para evitar ter que resolver esse problema, os desenvolvedores originais do Sybase SQL Server decidiram não permitir datas anteriores a 1753. Você pode armazenar datas anteriores usando campos de caracteres, mas não pode usar nenhuma função de data e hora com as datas anteriores armazenadas em campos de caracteres.
A escolha de 1753 parece um tanto anglocêntrica, no entanto, como muitos países católicos da Europa usavam o calendário há 170 anos antes da implementação britânica (originalmente atrasada devido à oposição da igreja). Por outro lado, muitos países não reformaram seus calendários até muito mais tarde, 1918 na Rússia. De fato, a Revolução de Outubro de 1917 começou em 7 de novembro sob o calendário gregoriano.
Ambos
datetime
e o novo datetime2
tipo de dados mencionado na resposta de Joe não tente explicar essas diferenças locais e simplesmente use o calendário gregoriano. Assim, com o maior intervalo de
datetime2
SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)
Devoluções
Sep 8 1752 12:00AM
Um ponto final com o
datetime2
tipo de dados é que ele usa o calendário gregoriano proléptico projetado para trás bem antes de ser realmente inventado, então é de uso limitado ao lidar com datas históricas. Isso contrasta com outras implementações de software, como a classe Java Gregorian Calendar, que por padrão segue o calendário juliano para datas até 4 de outubro de 1582 e, em seguida, salta para 15 de outubro de 1582 no novo calendário gregoriano. Ele lida corretamente com o modelo juliano do ano bissexto anterior a essa data e o modelo gregoriano após essa data. A data de transição pode ser alterada pelo chamador chamando
setGregorianChange()
. Um artigo bastante divertido discutindo mais algumas peculiaridades com a adoção do calendário pode ser encontrado aqui.