sql-server - 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 毫秒?
解决方案
datetime
精确到 1/300 秒。这也被记录在案。
由于 1/300 被四舍五入,然后0.0000000
将显示为0.000
,0.003333333333
as 0.003
,最后是0.00666666666666
and 0.007
。
如果您想要更高的精度(比如 1/1000 秒),那么您需要使用较新的datetime2
数据类型并为其提供3
( datetime2(3)
) 的精度。但是,任何现有值都将保留现有值。
如果您确实追求更高的准确性(例如datetime2(7)
),并将现有列更改为此数据类型,那么根据您使用的版本,您将获得不同的结果。在较新的版本中,该datetime
值2020-09-24T17:14:01.003
将转换为2020-09-24T17:14:01.0033333
但是在较旧的版本2020-09-24T17:14:01.0030000
中。这是您应该牢记的。
推荐阅读
- python - 如何在本地构建 Python 文档?
- r - R中的一系列相关矩阵
- c - macOS 上的地址空间布局随机化 (ALSR)
- express - 在 (res, req) 函数内部而不是在中间件内部使用 expressjs 进行验证
- xcode - 无法为 SwiftUI 计时器设置可变间隔
- triggers - 我的 Discord 机器人最近在被提及时不会响应
- javascript - 返回数组平方中所有偶数的总和(javascript)
- neo4j - Neo4j (3.5.14) 互连节点的 BFS/DFS 故障
- c - 你能确定 C 中的堆栈深度吗?
- visual-studio-code - vscode c/c++ 定义配置