哪一个:

日期时间日期时间2

在SQL Server 2008+中存储日期和时间的建议方法是什么?

我知道精度(可能还有存储空间)的差异,但现在忽略这些,是否有关于何时使用what的最佳实践文档,或者我们应该只使用datetime2?


当前回答

我刚刚偶然发现了DATETIME2的另一个优点:它避免了Python adodbapi模块中的一个错误,如果传递标准库datetime值,该值对于datetime列具有非零微秒,但如果将该列定义为DATETIME2,则会很好。

其他回答

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

使用time、date、datetime2和新的datetimeoffset数据类型工作这些类型与SQL一致标准它们更便于携带。time、datetime2和datetimeoffset提供更多的秒精度。datetimeoffset提供时区支持全球部署应用。

datetime2具有更大的日期范围、更大的默认小数精度和可选的用户指定精度。还取决于用户指定的精度,它可能使用更少的存储空间。

接受的答案很好,只需知道,如果您向前端发送DateTime2,它将四舍五入到正常的DateTime等效值。

这给我带来了一个问题,因为在我的解决方案中,我必须在重新提交时将发送的内容与数据库中的内容进行比较,而我的简单比较“==”不允许舍入。所以必须添加它。

Select ValidUntil + 1
from Documents

上面的SQL不适用于DateTime2字段。它返回错误“操作数类型冲突:datetime2与int不兼容”

添加1以获得第二天,这是开发人员多年来一直在使用日期的做法。现在微软有了一个超级新的datetime2字段,无法处理这个简单的功能。

“让我们使用比旧型号更糟糕的新型号”,我不这么认为!

虽然datetime2提高了精度,但有些客户端不支持date、time或datetime2,并强制您转换为字符串文本。微软特别提到了ODBC、OLE DB、JDBC和SqlClient这些数据类型的“底层”问题,并有一个图表显示了它们如何映射类型。

如果值兼容性超过精度,请使用datetime

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页