首页 > 解决方案 > SQL Modify_date 以毫秒为单位的分辨率

问题描述

我注意到我的数据库中 275 对象上的 Modify_date 的最后一个毫秒数总是 0、3 或 7。这看起来像 0/3、1/3(向下取整)和 2/3(向上取整)。

我写了这个查询来检查我的整个数据库,这是真的:

with a as (
select name,type_desc,modify_date, 
convert(int,DATEPART(MS,modify_date)) Mils
from sys.objects
),
 
b as (
select *,
RIGHT(Mils,1) rm
from a)
 
select * from b
order by rm

我不会列出所有 275 行,但它们都是 0、3 或 7。

我很想知道是什么原因导致这个时间的准确度不超过 3 毫秒?

标签: sql-server

解决方案


datetime精确到 1/300 秒。这也被记录在案

由于 1/300 被四舍五入,然后0.0000000将显示为0.0000.003333333333as 0.003,最后是0.00666666666666and 0.007

如果您想要更高的精度(比如 1/1000 秒),那么您需要使用较新的datetime2数据类型并为其提供3( datetime2(3)) 的精度。但是,任何现有值都将保留现有值。

如果您确实追求更高的准确性(例如datetime2(7)),并将现有列更改为此数据类型,那么根据您使用的版本,您将获得不同的结果。在较新的版本中,该datetime2020-09-24T17:14:01.003将转换为2020-09-24T17:14:01.0033333但是在较旧的版本2020-09-24T17:14:01.0030000中。这是您应该牢记的。


推荐阅读