首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么SQL Server会损失1毫秒?

为什么SQL Server会损失1毫秒?
EN

Stack Overflow用户
提问于 2009-04-03 19:49:20
回答 6查看 33K关注 0票数 70

我有一个结构如下的表:

代码语言:javascript
复制
CREATE TABLE [TESTTABLE]
(
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [DateField] [datetime] NULL,
    [StringField] [varchar](50),
    [IntField] [int] NULL,
    [BitField] [bit] NULL
)

我执行以下代码:

代码语言:javascript
复制
BEGIN 
   INSERT INTO TESTTABLE (IntField, BitField, StringField, DateField) 
   VALUES ('1', 1, 'hello', {ts '2009-04-03 15:41:27.378'});  

   SELECT SCOPE_IDENTITY()  
END

然后

代码语言:javascript
复制
select * from testtable with (NOLOCK)

我的结果显示:

代码语言:javascript
复制
2009-04-03 15:41:27.*377*

用于DateField列。

你知道为什么我看起来损失了一毫秒吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-04-03 20:00:05

SQL Server仅将时间存储到大约1/300秒。它们总是落在0、3和7毫秒。例如,从0开始,以最小的增量递增:

00:00:00.000

00:00:00.003

00:00:00.007

00:00:00.010

00:00:00.013

..。

如果你需要毫秒级的精确度,那就没有什么好的办法了。我见过的最好的选择是将值存储在自定义数字字段中,并在每次获取值时重新构建它,或者将其存储为已知格式的字符串。为了提高速度,您可以(可选地)将“近似”日期存储在原生date类型中,但它引入了通常不需要的概念上的复杂性。

票数 99
EN

Stack Overflow用户

发布于 2009-04-03 20:01:01

SQL Server 2008具有更高的精确度。datetime2类型将准确地存储值,如下所示: 2008-12-19 09:31:38.5670514 (精确度为100纳秒)。

参考:time and datetime2 - Exploring SQL Server 2008's New Date/Time Data Types

票数 42
EN

Stack Overflow用户

发布于 2009-04-03 19:51:58

SQL Server datetime类型的分辨率仅为1/300秒(~3.33̅ms),因此您可能会看到舍入误差。

请参阅MSDN Datetime SQL Server reference

票数 27
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/715432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档