哪一个:
日期时间日期时间2
在SQL Server 2008+中存储日期和时间的建议方法是什么?
我知道精度(可能还有存储空间)的差异,但现在忽略这些,是否有关于何时使用what的最佳实践文档,或者我们应该只使用datetime2?
哪一个:
日期时间日期时间2
在SQL Server 2008+中存储日期和时间的建议方法是什么?
我知道精度(可能还有存储空间)的差异,但现在忽略这些,是否有关于何时使用what的最佳实践文档,或者我们应该只使用datetime2?
当前回答
根据本文,如果您希望使用DateTime2获得与DateTime相同的精度,则只需使用DateTime1(3)。这将为您提供相同的精度,占用更少的字节,并提供扩展的范围。
其他回答
接受的答案很好,只需知道,如果您向前端发送DateTime2,它将四舍五入到正常的DateTime等效值。
这给我带来了一个问题,因为在我的解决方案中,我必须在重新提交时将发送的内容与数据库中的内容进行比较,而我的简单比较“==”不允许舍入。所以必须添加它。
使用非US DATEFORMAT设置时,将日期字符串解释为datetime和datetime2也可能不同。例如。
set dateformat dmy
declare @d datetime, @d2 datetime2
select @d = '2013-06-05', @d2 = '2013-06-05'
select @d, @d2
对于datetime,返回2013-05-06(即5月6日),对于datetime2,返回2013-06-05(即6月5日)。然而,当dateformat设置为mdy时,@d和@d2都返回2013-06-05。
日期时间行为似乎与MSDN的SETDATEFORMAT文档不一致,后者指出:某些字符串格式(例如ISO8601)的解释与DATEFORMAT设置无关。显然不是真的!
直到我被这个问题困扰,我一直认为yyyy-mm-dd日期会被正确处理,不管语言/语言环境设置如何。
datetime2在除(旧应用兼容性)之外的大多数方面都获胜
较大的值范围更好的准确性较小的存储空间(如果指定了可选的用户指定精度)
请注意以下几点
语法datetime2[(小数秒精度=>低于存储大小)]精度,刻度0至7位,精度为100ns。默认精度为7位数。存储大小精度小于3时为6字节;精度3和4为7字节。所有其他精度要求8字节。DateTime2(3)的位数与DateTime相同,但使用7字节的存储,而不是8字节(SQLHINTS-DateTime Vs DateTime2)查找有关datetime2的详细信息(Transact-SQL MSDN文章)
图像来源:MCTS自学训练套件(考试70-432):Microsoft®SQL Server®2008-实施和维护第3章:表格->第1课:创建表格->第66页
我认为DATETIME2是存储日期的更好方法,因为它比DATETIME。在SQL Server 2008中,您可以使用DATETIME2,它存储日期和时间,需要6-8个字节,精度为100纳秒。因此,任何需要更高时间精度的人都会想要DATETIME2。
根据本文,如果您希望使用DateTime2获得与DateTime相同的精度,则只需使用DateTime1(3)。这将为您提供相同的精度,占用更少的字节,并提供扩展的范围。