【问题标题】:What is the internal representation of datetime in sql server?sql server中日期时间的内部表示是什么?
【发布时间】:2010-11-11 17:03:49
【问题描述】:

存储在 SQL Server 中的日期时间值的基础数据结构是什么(如果不同,则为 2000 和 2005)?即到字节表示?

当您选择日期时间列时,您获得的默认表示可能是特定于文化的值/可能会发生变化。也就是说,一些我们看不到的底层结构被格式化为 YYYY-MM-DD HH:MM:SS.mmm。

我问的原因是,我的部门普遍认为它以 YYYY-MM-DD HH:MM:SS.mmm 的形式存储在内存中,但我确信情况并非如此。

【问题讨论】:

    标签: sql sql-server sql-server-2005 datetime internal-representation


    【解决方案1】:

    它是stored as an 8 byte field,范围从 1753-01-01 到 9999-12-31,精确到 0.00333 秒。

    这些细节据说是不透明的,但我在网上找到的大多数资源(1)(2) 都表明如下:

    前 4 个字节存储自 SQL Server 纪元(1900 年 1 月 1 日)以来的天数,后 4 个字节存储午夜之后的滴答数,其中“滴答”为 3.3 毫秒。

    前四个字节是有符号的(可以是正数或负数),这解释了为什么可以表示比纪元更早的日期。

    【讨论】:

    • 这不正确。来自链接的文章:实际上,SQL Server 确实在那里存储了自午夜以来的时钟滴答声。每个时钟滴答相当于 3.33 毫秒。这也是 DATETIME 数据类型的精度为百分之一秒的原因。这再次在 BOL 中正确说明。
    • @ctusch,我已经更新了答案(将近 7 年后!)以更正“刻度”的大小。
    • 有趣的是,SQL Server 文档使用了术语“准确性”。它应该说“精度”。
    • 更新:SQL Server 2019 使用 8 个字节,规定精度为“.000、.003 或 .007 秒”。 MS 文档 (docs.microsoft.com/en-us/sql/t-sql/data-types/…) 本身并没有给出细分。但是各个日期和时间类型分别使用 3 和 5 个字节,时间精度为 100ns。
    猜你喜欢
    • 2010-10-24
    • 2012-08-21
    • 2010-12-28
    • 2017-01-28
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多