小编典典

SQL Server 中 1/1/1753 的意义是什么?

all

为什么是 1753?他们对 1752 有什么看法?我的曾曾曾曾曾曾曾祖父会非常生气。


阅读 208

收藏
2022-03-11

共1个答案

小编典典

使用 1753 年 1 月 1 日 ( 1753-01-01) 作为 SQL Server 中日期时间的最小日期值的决定可以追溯到其Sybase
起源

菲利普·斯坦霍普,第四代切斯特菲尔德伯爵。谁在英国议会通过了1750
年日历(新样式)法案。
这立法为英国及其当时的殖民地采用公历。

1752 年,当最终从儒略历进行调整时,英国历法中有一些缺失的日子(互联网档案链接)
1752 年 9 月 3 日至 1752 年 9 月 13 日丢失。

Kalen Delaney以这种方式解释了选择

那么,失去了 12 天,您如何计算日期?例如,如何计算 1492 年 10 月 12 日和 1776 年 7 月 4 日之间的天数?你包括那些失踪的
12 天吗?为了避免不得不解决这个问题,最初的 Sybase SQL Server 开发人员决定不允许 1753
年之前的日期。您可以使用字符字段存储更早的日期,但不能将任何日期时间函数用于存储在字符中的更早日期字段。

1753
年的选择似乎有点以盎格鲁为中心,但在英国实施之前,欧洲的许多天主教国家已经使用了
170
年(最初由于教会的反对而推迟)。相反,许多国家直到
1918 年在俄罗斯才改革他们的历法。事实上,1917 年的十月革命于公历 11 月 7 日开始。

中提到的两者datetime和新数据类型都没有尝试考虑这些本地差异,而只是使用公历。datetime2

所以随着更大的范围datetime2

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

退货

Sep  8 1752 12:00AM

数据类型的最后一点datetime2是,它使用了在实际发明之前向后投影的预测公历,因此在处理历史日期时用途有限。

这与其他软件实现形成对比,例如 Java Gregorian
Calendar
类,该类默认遵循儒略历直到
1582 年 10 月 4 日,然后在新的公历中跳转到 1582 年 10 月 15
日。它正确处理了该日期之前的闰年儒略模型和该日期之后的公历模型。调用者可以通过调用来更改截止日期setGregorianChange()

可以在这里找到一篇相当有趣的文章,讨论采用日历的一些更多特性。

2022-03-11