协慌网

登录 贡献 社区

SQL Server 中的 DateTime2 vs DateTime

哪一个:

SQL Server 2008 + 中存储日期和时间推荐方法是什么?

我知道精度(可能还有存储空间)上的差异,但是暂时忽略这些差异,是否有关于何时使用什么的最佳实践文档,或者我们仅应使用datetime2

答案

有关datetime的 MSDN 文档建议使用datetime2 。这是他们的建议:

timedatedatetime2datetimeoffset数据类型用于新工作。这些类型符合 SQL 标准。它们更便携。 timedatetime2datetimeoffset提供更高的秒精度。 datetimeoffset为全局部署的应用程序提供时区支持。

datetime2 具有较大的日期范围,较大的默认小数精度和可选的用户指定精度。另外,根据用户指定的精度,它可能会使用较少的存储空间。

DATETIME2的日期范围是 “0001/01/01” 到 “9999/12/31”,而DATETIME类型仅支持 1753-9999 年。

另外,如果需要, DATETIME2可以在时间上更精确; DATETIME 限制为 3 1/3 毫秒,而DATETIME2可以精确到 100ns。

两种类型都映射到. NET 中的System.DateTime那里没有区别。

如果您有选择,我建议尽可能使用DATETIME2 。我看不到DATETIME使用有什么好处(向后兼容性除外)- 您的麻烦会减少(日期超出范围且像这样麻烦)。

另外:如果您只需要日期(没有时间部分),请使用 DATE - 它与DATETIME2一样好,并且还节省了空间! :-) 相同的只是时间 - 使用TIME 。这就是这些类型的用途!

datetime2在大多数方面都胜出,但(旧应用程序兼容性)除外

  1. 更大的价值范围
  2. 精度更高
  3. 较小的存储空间 (如果指定了用户指定的可选精度)

SQL日期和时间数据类型比较-datetime,datetime2,date,TIME

请注意以下几点

  • 句法
    • datetime2 [(分数精确度 => 低于存储大小)]
  • 精度,规模
    • 0 至 7 位数字,精度为 100ns。
    • 默认精度为 7 位数字。
  • 储存空间
    • 6 个字节,精度小于 3;
    • 7 字节的精度 3 和 4。
    • 所有其他精度要求 8 个字节
  • DateTime2(3)的位数与 DateTime 相同,但是使用 7 个字节的存储空间,而不是 8 个字节( SQLHINTS- DateTime 与 DateTime2
  • 查找有关datetime2 的更多信息(Transact-SQL MSDN 文章)

图片来源: MCTS 自定进度培训套件(考试 70-432):Microsoft®SQLServer®2008 - 实施和维护第 3 章:表 -> 第 1 课:创建表 -> 第 66 页