为了账号安全,请及时绑定邮箱和手机立即绑定

为什么SQL Server会丢失一毫秒?

为什么SQL Server会丢失一毫秒?

慕容708150 2019-09-03 19:20:32
我有一个像这样结构的表:CREATE TABLE [TESTTABLE](    [ID] [int] IDENTITY(1,1) NOT NULL,    [DateField] [datetime] NULL,    [StringField] [varchar](50),    [IntField] [int] NULL,    [BitField] [bit] NULL)我执行以下代码:BEGIN    INSERT INTO TESTTABLE (IntField, BitField, StringField, DateField)    VALUES ('1', 1, 'hello', {ts '2009-04-03 15:41:27.378'});     SELECT SCOPE_IDENTITY()  END然后select * from testtable with (NOLOCK)我的结果显示:2009-04-03 15:41:27.*377*为DateField列。任何想法为什么我似乎失去了一毫秒?
查看完整描述

4 回答

?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

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 

...


如果你需要毫秒级的精度,那就没有愉快的方法了。我见过的最佳选项是将值存储在自定义数字字段中,并在每次获取值时重建它,或将其存储为已知格式的字符串。然后,您可以(可选)为了速度而在本机日期类型中存储“近似”日期,但它会引入通常不需要的概念复杂性。


查看完整回答
反对 回复 2019-09-03
?
杨__羊羊

TA贡献1943条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-09-03
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

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


查看完整回答
反对 回复 2019-09-03
?
杨魅力

TA贡献1811条经验 获得超6个赞

SQL Server仅精确到1/300秒。它将值舍入到最接近的1/300。


查看完整回答
反对 回复 2019-09-03
  • 4 回答
  • 0 关注
  • 667 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信