Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Qual é o significado de 1/1/1753 no SQL Server?


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.