zoukankan      html  css  js  c++  java
  • SQL Server中smalldatetime的日期范围为何是[1900-01-01,2079-06-06]

    本文目录列表:
     
    SQL Server中的基准日期
     
    SQL Server 中针对datetime和smalldatetime这两个日期时间数据类型提供一个基准日期,也就是1900-01-01。
    以下摘录自MSDN

    SQL Server 2005 数据库引擎用两个 4 字节的整数内部存储 datetime 数据类型的值。第一个 4 字节存储“基础日期”(即 1900 年 1 月 1 日)之前或之后的天数。基础日期是系统参照日期。另外一个 4 字节存储天的时间,以午夜后经过的 1/300 秒数表示。

    smalldatetime 数据类型存储天的日期和时间,但精确度低于 datetime。数据库引擎将 smalldatetime 值存储为两个 2 字节的整数。第一个 2 字节存储 1900 年 1 月 1 日后的天数。另外一个 2 字节存储午夜后经过的分钟数。

    注意:

    1、以上“基础日期”(即1900年1月1日)也就是本文要说的基准日期。

     

    smalldatetime的日期范围
    smalldatetime的日期范围根据msdn中相关资料是[1900-01-01,2079-06-06]。
     
    smalldatetime的日期范围和无符号2字节整数的关系
     
    SQL Server针对datetime和smalldatetime的数据类型的变量或字段列赋值为0或1900-01-01,其结果是相同的。
    以下T-SQL代码效果如下:
     
     
    smalldatetime日期的最大值为2079-06-06,如果针对该数据的赋值为65535(该值为无符号2字节整数的最大值2^16-1),结果也是为2079-06-06的,以下T-SQL代码效果如下:
     
    从0对应1900-01-01,65535对应2079-06-06其对应关系,大致可以得到smalldatetime的日期范围和无符号2字节整数的范围正好一一对应的。可以通过T-SQL得到证明,如下:
    注意:
    1、中间省略了部分,仅显示头和尾的数据对应,中间省略。
    2、函数dbo.ufn_GetNums可以参看SQL Server数字辅助表的实现
     
    总结语
     
    smalldatetime的日期范围是和无符号2字节整数的范围一一对应的。针对这种对应关系,如果数据表中的字段列为日期时间数据类型,且精度为天,就可以保存一个整数和该日期保存一种对应关系,可以参考基准日期1900-01-01做起点映射,当然也可以选择其他的日期,当然也考虑相应的日期时间数据类型的范围的。
     
    参考清单列表
  • 相关阅读:
    解决maven导入坐标太慢问题
    +=的扩展
    JavaScript
    多线程
    异常
    面向对象
    数组
    java内存
    循环语句和递归
    剑指 Offer 30. 包含min函数的栈
  • 原文地址:https://www.cnblogs.com/dzy863/p/5228998.html
Copyright © 2011-2022 走看看