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

我有一个像这样结构的表:


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列。


任何想法为什么我似乎失去了一毫秒?


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

杨__羊羊

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

小唯快跑啊

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

杨魅力

SQL Server仅精确到1/300秒。它将值舍入到最接近的1/300。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

SQL Server