为啥 SQL Server DATETIME 类型可以节省 1/300 秒的时间?

Posted

技术标签:

【中文标题】为啥 SQL Server DATETIME 类型可以节省 1/300 秒的时间?【英文标题】:Why SQL Server DATETIME type saves time in ticks of 1/300 of a sec?为什么 SQL Server DATETIME 类型可以节省 1/300 秒的时间? 【发布时间】:2014-03-16 13:04:04 【问题描述】:

SQLServer 日期时间格式存储为 8 个字节,其中前四个字节是自 1900 年 1 月 1 日以来的天数,其他四个字节是自午夜以来的滴答数。刻度是秒的 1/300。

我想知道为什么会这样? 1/300 是从哪里来的?这一定有一些历史原因。

【问题讨论】:

我经常想知道为什么最接近午夜的时间是 23:59:59.997。 @Jonathan - 这通常表明您在处理日期时间数据并想要一整天的价值时应该使用专有端点(即第二天的午夜) - 如果您已经硬编码997 或使用其他技巧来计算它,如果您转移到 datetime2,则必须更改所有代码。 这可以追溯到 Sybase 时代。最大 32 位有符号整数将允许高达每秒 24,855 个滴答的精度,所以我也想知道这一点。 【参考方案1】:

是的,有一个历史原因:UNIX!

有关详细信息,请阅读 Joe Celko 撰写的 excelent article 。

这是您要查找的详细信息:

T-SQL 中的时态数据 曾经是UNIX系统时钟滴答的囚徒,只能去 舍入误差到小数点后三位秒。新的 ANSI/ISO 数据 类型可以精确到小数点后七秒,具有真实的 DATE 和 TIME 数据 类型。由于它们是新的,大多数程序员还没有使用它们。

【讨论】:

他是说 Unix 每秒也只有 300 个滴答吗?或者只是两者都使用刻度的概念? 这是关于第一个 unix 内部时钟的旧分辨率 - 与它们的计时方式无关,只是它们的时间分辨率如何。 Sql server 有相当多的老 unix (sybase) 祖先,只检查时间戳列,根本没有时间戳;)

以上是关于为啥 SQL Server DATETIME 类型可以节省 1/300 秒的时间?的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server datetime类型转换超出范围的报错

将 char 数据类型转换为 datetime 数据类型导致 SQL Server 2005 中的 datetime 值超出范围

怎么设置sql server时间类型datetime的默认值的呢

sqlserver数据库中为datetime类型,通过myeclipse逆向工程生成实体类中属性为啥是java.sql.Timestamp

怎么设置sql server时间类型datetime的默认值的呢

SQL Server Datetime类型为NULL不能用ISNULL(datetime,' ')来判断,会导致1900-01-01