¿Cuál es el significado del 1/1/1753 en SQL Server?

Resuelto Daniel asked hace 14 años • 6 respuestas

¿Por qué 1753? ¿Qué tienen contra 1752? Mi tatarabuelo se sentiría muy ofendido.

Daniel avatar Jul 22 '10 22:07 Daniel
Aceptado

La decisión de utilizar el 1 de enero de 1753 ( 1753-01-01) como valor de fecha mínimo para una fecha y hora en SQL Server se remonta a sus orígenes Sybase .

Sin embargo, el significado de la fecha en sí se puede atribuir a este hombre.

Philip Stanhope, cuarto conde de Chesterfield

Philip Stanhope, cuarto conde de Chesterfield. Quien dirigió la Ley de Calendario (Nuevo Estilo) de 1750 a través del Parlamento Británico. Esto legisló para la adopción del calendario gregoriano para Gran Bretaña y sus entonces colonias.

Faltaban algunos días (enlace al archivo de Internet) en el calendario británico en 1752 cuando finalmente se hizo el ajuste del calendario juliano. Se perdieron del 3 de septiembre de 1752 al 13 de septiembre de 1752.

Kalen Delaney explicó la elección de esta manera

Entonces, con 12 días perdidos, ¿cómo se pueden calcular las fechas? Por ejemplo, ¿cómo se puede calcular el número de días entre el 12 de octubre de 1492 y el 4 de julio de 1776? ¿Incluye los 12 días que faltan? Para evitar tener que resolver este problema, los desarrolladores originales de Sybase SQL Server decidieron no permitir fechas anteriores a 1753. Puede almacenar fechas anteriores utilizando campos de caracteres, pero no puede utilizar ninguna función de fecha y hora con las fechas anteriores que almacene en caracteres. campos.

Sin embargo, la elección de 1753 parece algo anglocéntrica, ya que muchos países católicos de Europa habían estado utilizando el calendario durante 170 años antes de la implementación británica (originalmente retrasada debido a la oposición de la iglesia ). Por el contrario, muchos países no reformaron sus calendarios hasta mucho más tarde, en 1918 en Rusia. De hecho, la Revolución de Octubre de 1917 comenzó el 7 de noviembre según el calendario gregoriano.

Tanto datetimeel nuevo datetime2tipo de datos como el mencionado en la respuesta de Joe no intentan tener en cuenta estas diferencias locales y simplemente usan el Calendario Gregoriano.

Así, con la mayor gama dedatetime2

SELECT CONVERT(VARCHAR, DATEADD(DAY,-5,CAST('1752-09-13' AS DATETIME2)),100)

Devoluciones

Sep  8 1752 12:00AM

Un último punto con el datetime2tipo de datos es que utiliza el calendario gregoriano proléptico proyectado hacia atrás mucho antes de que fuera inventado, por lo que es de uso limitado al tratar con fechas históricas.

Esto contrasta con otras implementaciones de software, como la clase Calendario gregoriano de Java , que de forma predeterminada sigue el calendario juliano para las fechas hasta el 4 de octubre de 1582 y luego salta al 15 de octubre de 1582 en el nuevo calendario gregoriano. Maneja correctamente el modelo juliano de año bisiesto anterior a esa fecha y el modelo gregoriano posterior a esa fecha. La persona que llama puede cambiar la fecha de corte llamando al setGregorianChange().

Puede encontrar un artículo bastante entretenido que analiza algunas peculiaridades más de la adopción del calendario aquí .

Martin Smith avatar Jul 22 '2010 15:07 Martin Smith

Su tatarabuelo debe actualizar a SQL Server 2008 y utilizar el tipo de datos DateTime2 , que admite fechas en el rango: 0001-01-01 a 9999-12-31.

Joe Stefanelli avatar Jul 22 '2010 15:07 Joe Stefanelli