SqlDateTime.MinValue != DateTime.MinValue,为什么?

2023-11-29

我想知道,为什么 SqlDateTime.MinValue 与 DateTime.MinValue 不一样?


我认为 SQL 和 .NET 之间的区别Date数据类型源自 SQL Server 的事实datetime数据类型、最小值和最大值以及精度都比 .NET 的 DateTime 数据类型早得多。

随着 .NET 的出现,团队决定 Datetime 数据类型应该具有更多功能natural最小值,01/01/0001 似乎是一个相当合乎逻辑的选择,而且肯定来自编程语言, 而不是database从角度来看,这个值是比较自然的。

顺便说一句,在 SQL Server 2008 中,出现了许多新的基于日期的数据类型(Date, Time, 日期时间2, 日期时间偏移量)实际上确实提供了更大的范围和精度,并且紧密映射到 .NET 中的 DateTime 数据类型。例如,DateTime2 数据类型的日期范围为 0001-01-01 到 9999-12-31。

SQL Server 的标准“日期时间”数据类型始终具有最小值 01/01/1753(实际上仍然如此!)。我必须承认,我也很好奇这个值的意义,所以也进行了一些挖掘。我发现如下:

从公元1年到今天,西方世界实际上使用了两种主要历法:凯撒大帝的儒略历和教皇格列高利十三世的格里高利历。这两种历法仅在一项规则上有所不同:确定闰年的规则。在儒略历中,所有能被四整除的年份都是闰年。在公历中,所有能被 4 整除的年份都是闰年,但能被 100 整除(但不能被 400 整除)的年份不是闰年。因此,1700年、1800年和1900年在儒略历中是闰年,但在公历中不是闰年,而1600年和2000年在两种历法中都是闰年。

教皇格列高利十三世在1582年介绍他的历法时,还指示应该跳过1582年10月4日到1582年10月15日之间的日子,也就是说,他说10月4日之后的一天应该是10月15日。许多国家不过,推迟了转换。英国及其殖民地直到 1752 年才从儒略历转换为公历历法,因此对他们来说,跳过的日期是 1752 年 9 月 4 日至 9 月 14 日之间。其他国家在其他时间进行转换,但 1582 年和 1752 年是相关日期我们正在讨论的 DBMS。

因此,当人们追溯到很多年前时,日期算术会出现两个问题。第一个问题是,转换前的闰年应该按照儒略规则还是公历规则计算?第二个问题是,跳过的日子应该何时以及如何处理?

这就是八大 DBMS 处理这些问题的方式:

  • 假装没有开关。这似乎是 SQL 标准所要求的,尽管标准文档不清楚:它只是说日期“受到使用公历的日期的自然规则的约束”——无论“自然规则”是什么。这是 DB2 选择的选项。当有人假装单一日历的规则始终适用于甚至没有人听说过该日历的时代时,技术术语是“预产”日历正在生效。因此,例如,我们可以说 DB2 遵循预推公历。

  • 完全避免这个问题。Microsoft 和 Sybase 将最小日期值设置为 1753 年 1 月 1 日,安全地超过了美国切换日历的时间。这是有道理的,但时不时有人抱怨这两个 DBMS 缺乏其他 DBMS 所具有的有用功能以及 SQL 标准所需的功能。

  • 选择1582。这就是Oracle 所做的。 Oracle 用户会发现日期算术表达式 1582 年 10 月 15 日减去 1582 年 10 月 4 日得到的值为 1 天(因为 10 月 5 日到 14 日不存在),并且日期 1300 年 2 月 29 日是有效的(因为儒略历闰秒)。年规则适用)。当 SQL 标准似乎没有要求时,为什么 Oracle 会遇到额外的麻烦呢?答案是用户可能需要它。历史学家和天文学家使用这种混合系统而不是预推公历。 (这也是 Sun 在为 Java 实现 GregorianCalendar 类时选择的默认选项,尽管名称如此,但 GregorianCalendar 是一个混合日历。)

上述引用摘自以下链接:

SQL 性能调优:SQL 中的日期

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SqlDateTime.MinValue != DateTime.MinValue,为什么? 的相关文章

  • 用户模式 ​​.NET 设置存储在哪里?

    我想知道 NET 中 settings 文件背后的魔力是什么 假设您创建了一个在此示例中称为的程序集SettingsHolder 您创建一个公共的设置类 其中在用户模式下有一个字符串 然后进行编译 现在 您在 MyApp 中引用您的程序集
  • 不同提供商的相同 EDMX 文件

    我正在开发一个项目 其中有一个本地数据库 SQL CE 在不存在与服务器的连接的情况下用作缓冲区 在服务器上我想使用相同的数据库布局 当然 我想使用服务器和客户端上可用的 Common dll 中的相同 EDMX 文件 在客户端中 我有一个
  • 框架中有通用的交换方法吗?

    框架中是否存在这样的方法 public static void Swap
  • T-SQL 中结果集的幂集(所有组合)

    我需要一个 t sql 代码来获取结果集的幂集 输入示例 ColumnName 1 2 3 Example Output one columns as nvarchar 1 2 3 1 2 1 3 2 3 1 2 3 输出集可能包含重复值
  • C++ 中的“int”默认是“signed long int”吗?

    Is int默认情况下signed long int in C 它是否依赖于平台和 或编译器 如果是这样 怎么办 EDIT 以下任何一项是否保证是重复的 signed short int signed int signed long int
  • SQL 中的代码重用和模块化

    代码重用和模块化对于 SQL 存储过程编程来说是一个好主意吗 如果是这样 将这些功能添加到 SQL 存储过程代码库的最佳方法是什么 我通常为常见且重复的任务创建标量值函数 我发现它不仅可以简化与现有程序类似的新程序的开发 而且还有助于错误跟
  • 在 WHERE 子句中使用可选参数

    我有一个SP ALTER PROCEDURE dbo sp Compare lst varchar 100 frst varchar 100 NULL passportNo varchar 50 NULL AS SELECT FROM db
  • MSSQL:如何使用代码编写存储过程创建脚本?

    我正在尝试使用一个数据库中存在但另一个数据库中不存在的 information schema routines 查询存储过程定义列表 SELECT t1 Routine Definition FROM server1 MyDatabase
  • 从 SQL Server 中的子查询值或其他聚合函数获取平均值

    我有 SQL 语句 SQL Server SELECT COUNT ActionName AS pageCount FROM tbl 22 Benchmark WHERE DATEPART dw CreationDate gt 1 AND
  • 如何解决文件被另一个进程使用的问题?

    我一直在 VS NET 2010 中调试 没有任何问题 但现在无法建造 我收到错误 Unable to copy file filename to bin Debug filename The process cannot access t
  • SSIS Master 包执行来自另一个项目的包

    我有多个SSIS项目 但其中的一些包是相同的 我想创建一个包含所有内容的项目generic包并将其他项目与他们的特定包一起保存 所以我的问题是 是否有可能有一个主包可以执行并将父变量传递给另一个项目的包 我是 SSIS 新手 如果这是一个明
  • 如何使 WinForms UserControl 填充其容器的大小

    我正在尝试创建一个多布局主屏幕应用程序 我在顶部有一些按钮链接到应用程序的主要部分 例如模型中每个实体的管理窗口 单击这些按钮中的任何一个都会在面板中显示关联的用户控件 面板包含用户控件 而用户控件又包含用户界面 WinForms User
  • 在 Windows 中为 Apple 推送通知创建 p12 证书

    我正在用 C 为 iPhone 做推送通知 服务器端 我有 developer Push SSL certi cer 文件 如何从 cer 文件创建 p12 证书 或者我必须在我的电脑上安装上述 cer 文件 在服务器端发送推送通知所需的文
  • 如何在 SQL Server 2008 中使用 GUID 数据类型?

    我想使用建立一个员工表SQL SERVER 2008 在我的表中 我希望为每个员工提供一个 ID 我听说过GUID我有点明白它是一种数据类型 但我无法使用它 你能告诉我使用它的方法吗 顺便说一句 假设我想要这样的东西 CREATE TABL
  • 实体框架中的 DbSet [重复]

    这个问题在这里已经有答案了 我在实体框架中有以下代码 using var dbc new TestDbContext var data from a in dbc tableList select new a id ToList 当我调试代
  • 多线程 Web 应用程序

    我知道有很多情况都是在应用程序中使用多线程的好例子 但是什么时候最好在 net Web 应用程序中使用多线程 Web 应用程序几乎肯定已经由托管环境 IIS 等 实现多线程化 如果您的页面受 CPU 限制 并且想要使用多个核心 那么可以说多
  • 有没有办法将对象(及其属性)序列化为 xml?

    创建一个类 将其命名为 FormElement 该类应该具有一些属性 例如它们具有数据元素的元数据 名称 序列号 值 只是一个字符串等 该类具有验证应用程序块验证类类型的属性 我想将其序列化为xml并反序列化 验证类的所有属性 包括验证应用
  • SecurityAction.RequestMinimum 在 .Net 4.0 中已过时

    最近 我们的 Net 客户端库正在升级以针对 Net 4 0 进行编译 将目标框架更改为4 0后 应用程序出现一些编译错误 In AssemblyInfo cs assembly SecurityPermission SecurityAct
  • 为什么 0.5 mod 0.1 在不同的编程语言中结果不同?

    我有一个关于模数的问题 模运算求一个数除以另一个数的余数 我原本期望 0 5 0 1 0 的结果 但是当我在 PHP 或 net 中运行它时 我得到 0 1 我运行的 php 代码是 var dump fmod 0 5 0 1 在 net中
  • 导入到 SQL Server 时忽略 Excel 文件中的列

    我有多个具有相同格式的 Excel 文件 我需要将它们导入 SQL Server 我当前遇到的问题是 有两个文本列我需要完全忽略 因为它们是自由文本 并且某些行的字符长度超出了服务器允许我导入的长度 这会导致截断错误 因为我的分析不需要这些

随机推荐

  • jQuery 交叉淡入淡出插件

    我正在尝试构建或实现标题 图像旋转器 用户将单击一个数字 1 2 3 图像将淡出 淡入 并根据所选数字进行标题更改 跨度元素中的某些文本 是否有现有插件可以执行此操作 如果没有 使用 jQuery 实现此目的的最佳方法是什么 Thanks
  • Sed/Awk 在文件中搜索和替换/插入文本

    我正在尝试更新或插入一些注释 例如版权标头到目录 Linux 中的所有源文件中 我的文件不一致 因此其中一些文件已经有标题 而其他文件则根本没有 我尝试过sed查看前几行并替换 替换我的意思是用最新的文件更改已经具有版权标头的文件 sed
  • 响应式 SVG 视图框

    我在 SVG 中制作了一个 汉堡按钮 如下所示 body margin 0 text align center svg ham btn margin 2rem border 1px solid black fill 383838
  • 带信号量的线程安全单例问题

    我编写了一个简单的单例应用程序 以下是我的示例主类 ThreadsafeSingletonUsingSemaphore cpp Defines the entry point for the console application incl
  • initMap 不是一个函数

    我不明白有什么问题 我使用了 Google Map API 中的这个示例 简单地图 section section main js
  • Java程序执行一个命令需要很长时间

    我阅读了很多示例 最终使用以下代码从 Java 程序内部执行命令行命令 public static void executeCommand final String command throws IOException Interrupte
  • Javadoc 中文本文件(资源)的链接

    我进行了搜索 但找不到正确的答案 如何在 Javadoc 中使用指向资源文本文件的链接 link easywords txt 不起作用 a href Easy words a 也不行 Try a href Easy words a 反而 链
  • 使用 C# 为通过 Gmail 发送的邮件设置不同的“发件人”地址

    我正在使用一个简单的邮件发送器类 该类使用System Net Mail 我需要更新我的应用程序 以便各个用户可以通过它发送电子邮件 使用相同的 smtp 帐户 但 发件人 地址应该是导致发送电子邮件的用户的地址 我尝试设置From的财产M
  • Hashmap、Treemap 和 LinkedHashmap 在 Java 中如何工作?

    我对地图有各种疑问 迭代 Hashmap 时 无法保证迭代顺序 这是为什么呢 为什么 Hashmap 比 Treemap 更快 LinkedHashMap 是如何工作的 它们如何维护顺序 是因为它们有一个双向链表 其中包含有关哪个条目存储在
  • 为什么Java不初始化数组对象?

    如果在java中运行以下代码 public class Testing public static void main String args TestObject array new TestObject 4 array 0 new Te
  • 绑定到 Window.Resources 中 DataTemplate 中拥有窗口视图模型中的属性

    我的窗口资源部分中有一个 DataTemplate 它创建一个带有 ContextMenu 的 TextBlock 我希望能够设置 ContextMenu 中的 MenuItem 在我的窗口视图模型中是否可见 我尝试通过设置访问窗口的 Da
  • 有没有办法在本地更新 maven 的 default-bindings.xml

    这听起来可能很愚蠢 但是有没有办法编辑或更新maven的默认绑定文件呢 META INF plexus default bindings xml 我为什么要这么做 背景 我正在使用最新的maven version 3 3 9在我的机器上作为
  • 如何在pygame中的精灵上放置健康栏

    根据标题 我希望我的玩家头上有一个生命条 如果他们移动 生命条也会移动 说精灵是我的玩家 嘿精灵 他的头顶上有一个健康栏 是的 就是这样 老实说 我真的不知道从哪里开始 所以我们将不胜感激 谢谢 附 非常感谢Rabbid76的帮助 还有安禅
  • 是否可以并行读取网络摄像头帧?

    我有一个简单的Python使用捕获网络摄像头的脚本OpenCV 我的网络摄像头有潜力传输 30 FPS 但自从我树莓派不够强大 我只能读取 20 FPS 运行脚本时 我的 CPU 的一个核心最大使用到 100 但其余核心未受影响 因此我尝试
  • 只显示文章内容

    如何只显示一篇文章中的内容 我使用 Joomla 2 5 和 Ajax 来调用一篇文章 但是当我在 div 标签 我再次渲染页眉 页脚和所有页面 但我只想要内容 如何配置页面或文章以仅显示内容 如果您只想获取组件 可以附加tmpl comp
  • 在 postgresql 中存储 24:00:00 以上时间的最佳方法?

    我将 GTFS 源存储到 SQL 数据库中 并且某些时间预计存储在 24 00 00 时间上限之上 例如 某些列车在上午 12 30 运行 但列出了前几天的服务 并且该运行时间在 GTFS 规范中存储为 24 30 解决这个问题的最佳方法是
  • 哈希图空间和性能问题

    我必须在 HashMultiMap 中存储超过 1 亿个键值 键可以有多个值 谁能帮助我哪一个存储和搜索速度更快 1 伯克利数据库 2 东京内阁 3 H2 4 EhCache 5 或其他 另一点 那些性能与内存中的哈希图大致相同吗 一点点指
  • 如何将动态html转换为pdf?

    我想将动态 html 转换为 pdf 以下代码显示静态 html 到 pdf 的转换 Document document new Document step 2 PdfWriter writer PdfWriter getInstance
  • super() 在 Sublime Text 中抛出错误,适用于 PyCharm/Terminal

    我生成了以下代码作为作业的一部分 class Question Base class for all questions question count 0 def init self desc self desc desc Question
  • SqlDateTime.MinValue != DateTime.MinValue,为什么?

    我想知道 为什么 SqlDateTime MinValue 与 DateTime MinValue 不一样 我认为 SQL 和 NET 之间的区别Date数据类型源自 SQL Server 的事实datetime数据类型 最小值和最大值以及