我不知道,为什么SqlDateTime.MinValue不是同一日期时间。MinValue?

有帮助吗?

解决方案

我想之间的差SQL的。净的 日期 数据类型来源于这样的事实,SQL服务器的 datetime 数据类型,它是最小和最大价值,它的精准度是多大年龄比。净的日期时间的数据类型。

随着。净额,小组决定这一日期时间数据的类型应该有一个更多 自然的 最小数值,并01/01/0001似乎是一个相当合乎逻辑的选择,肯定是从一个 编程语言, 而不是 数据库 的角度看,这值更自然的。

顺便说一句,与SQL服务器2008年,有一些新的日期-基础的数据类型(日期, 时间, DateTime2, DateTimeOffset),实际上不提供增大的范围和精度,并密切地图的日期时间的数据类型。网。例如,DateTime2数据的类型有一个日期范围从0001-01-01通过9999-12-31.

标准的"时间"数据类型的SQL服务器总是具有最低价值的01/01/1753(和事实上仍然没有!).我必须承认,我也很好奇这个意义价值,所以没有一些挖掘..我发现了什么情况如下:

这一期间1A.D.今天,西方世界有实际使用的两个主要的日历:儒略历的凯撒大帝和历的Pope Gregory XIII。这两个日历各有不同,相对于只有一个规则:规则用以决定哪一个闰年。在历,所有年可分割的,由四个闰年。在历,所有年可分割的,由四个闰年,除了年可分割的,由100(但不可分割的,由400)不闰年。因此,年1700,1800年,和1900是闰年在儒略历的但不是在公历,而1600年和2000年闰年在这两个日历。

当Pope Gregory XIII介绍了他的日历在1582,他还针对那天月间的4,1582,并October15,1582,应该跳过—那就是,他说,一天后,十月4月15日。许多国家延迟了改变过,虽然。英格兰和她的殖民地,没有从朱利安来历清算直到第1752,因此对于他们,跳过的日期之间的月4日和14日,1752.其他国家交换在其他时间,但1582和第1752是相关的日期,的数据库管理系统,我们正在讨论。

因此,两个问题出现日期计算当一个追溯到许多年。第一是,应该闰年之前开关的计算根据的朱利安或公规则?第二个问题是,何时以及如何应当跳过几天能处理的?

这是怎样的八大数据库管理系统处理这些问题:

  • 假装没有开关。这是什么SQL标准似乎需要,尽管该标准文件目前还不清楚:它只是说,日期是"受自然规则的日期使用的历"—什么"自然规则"。这是选项,DB2选择。当那里是一个幌子,一个单一日历的规则必须始终适用,即使到时候没有人听到的日历,技术术语是"预期"日历日生效。因此,例如,我们可以说,DB2下一个预期公历。

  • 避免的问题。 Microsoft和Sybase定他们的最低期值在月1日1753年,安全地过去的时间,美国交换日历。这个是站得住脚的,但不时面的投诉,这两个数据库管理系统缺乏一个有用的功能,该功能的其他数据库管理系统已经和SQL标准的要求。

  • 挑1582.这是什么Oracle没有。一个Oracle的用户会发现之日起算术表达十月15 1582负月4 1582产生一个价值1日(因为十月5至14个不存在)和日期二月29 1300是有效的(因为朱利安闰年规则适用).为什么Oracle去额外麻烦的时候SQL标准似乎并不需要它吗?答案是,用户可能需要它。历史学家和天文学家使用这种混合的系统,而不是预期公历。(这也是默认项,太阳挑当实施GregorianCalendar类Java—尽管名称,GregorianCalendar是一种混合日历。)

这上面引用取自以下链接:

SQL性调整:日SQL

其他提示

因为,在SQL Server中,可以存储在日期时间字段(1753/1/1)中的最小日期不等于DateTime .NET数据类型(0001/1/1)的MinValue。

1753是日的第一次采用者的历(中国).为什么这个是选择在01/01/0001-这是毫无疑问的遗产从当SQL服务器Sybase早在1990年代。他们必须做出设计决定,在初期和Microsoft SQL队还没有看到一个原因去改变它。

由于爆炸。网和一体化的成Sql服务器,现在存在的 DateTime2 对于兼容性.如果你是一种它能够用户, 你可以提供这种类型 在你的类型映射避免 DateTime.Min 的问题

.净日期满足其他日历之外公一:

  • 日历
    • ChineseLunisolarCalendar
    • EastAsianLunisolarCalendar
    • GregorianCalendar
    • HebrewCalendar
    • HijriCalendar
    • JapaneseCalendar
    • JapaneseLunisolarCalendar
    • JulianCalendar
    • KoreanCalendar
    • KoreanLunisolarCalendar
    • PersianCalendar
    • TaiwanCalendar
    • TaiwanLunisolarCalendar
    • ThaiBuddhistCalendar
    • UmAlQuraCalendar

该JulianCalendar事实上的预期 DateTime.MinValue

两个不同的小组决定了什么是“最低”。就日期/时间而言意味着他们。

SQL为DateTime使用不同的内部表示。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top