DateTime2与SQL Server中的DateTime

哪个: sql

是在SQL Server 2008+中存储日期和时间推荐方法吗? spa

我知道精度(和存储空间可能)的差别,但暂时忽略这些,是否有关于什么时候使用什么的最佳实践文档,或者咱们应该只使用datetime2.net


#1楼

datetime2在大多数方面获胜,除了(旧应用程序兼容性) code

  1. 更大范围的价值观
  2. 更好的准确性
  3. 较小的存储空间 (若是指定了可选的用户指定精度)

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

请注意如下几点 orm

  • 句法
    • datetime2 [(小数秒精度=>查看低于存储空间大小)]
  • 精度,规模
    • 0到7位数,精度为100ns。
    • 默认精度为7位数。
  • 存储大小
    • 6个字节,精度小于3;
    • 7个字节用于精度3和4。
    • 全部其余精度须要8个字节
  • DateTime2(3)具备与DateTime相同的位数,但使用7个字节的存储而不是8个字节( SQLHINTS- DateTime Vs DateTime2
  • datetime2上查找更多内容(Transact-SQL MSDN文章)

图像源: MCTS Self-Paced Training Kit(考试70-432):Microsoft®SQLServer®2008 - 实施和维护第3章:表格 - >第1课:建立表格 - >第66页 文档


#2楼

DATETIME2的日期范围为“0001/01/01”至“9999/12/31”,而DATETIME类型仅支持1753-9999年。 字符串

此外,若是您须要, DATETIME2能够在时间上更精确; DATETIME限制为3 1/3毫秒,而DATETIME2能够精确到100ns。 部署

这两种类型都映射到.NET中的System.DateTime - 没有区别。 get

若是您有选择,我建议尽量使用DATETIME2 。 我没有看到使用DATETIME任何好处(向后兼容性除外) - 你会遇到更少的麻烦(日期超出范围而且麻烦这样)。 it

另外:若是您只须要日期(没有时间部分),请使用DATE - 它与DATETIME2同样好,也能够节省空间! :-)一样只限时间 - 使用TIME 。 这就是这些类型的用途!


#3楼

使用非美国DATEFORMAT设置时,日期字符串到datetimedatetime2也可能不一样。 例如

set dateformat dmy
declare @d datetime, @d2 datetime2
select @d = '2013-06-05', @d2 = '2013-06-05'
select @d, @d2

这将返回2013-05-06 (即五月六日)的datetime ,和2013-06-05进行(即六月五日) datetime2 。 然而, dateformat设置为mdy ,既@d@d2回报2013-06-05

datetime行为彷佛与SET DATEFORMATMSDN文档不一致,后者指出: 某些字符串格式(例如ISO 8601)的解释与DATEFORMAT设置无关 。 显然不是真的!

直到我被这个咬了,我老是认为yyyy-mm-dd日期只会被正确处理,不管语言/语言环境设置如何。


#4楼

datetime的MSDN文档建议使用datetime2 。 如下是他们的建议:

使用timedatedatetime2datetimeoffset数据类型进行新工做。 这些类型与SQL标准一致。 它们更便携。 timedatetime2datetimeoffset提供更多的秒精度。 datetimeoffset为全局部署的应用程序提供时区支持。

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


#5楼

我认为DATETIME2是存储date的更好方法,由于它比DATETIME具备更高的效率。 在SQL Server 2008您可使用DATETIME2 ,它存储日期和时间,须要6-8 bytes进行存储,精度为100 nanoseconds 。 因此任何须要更高时间精度的人都须要DATETIME2

相关文章
相关标签/搜索