粒度SQL日期时间的

问题描述:

我有一个数据库中的datetime列,当我测试将它设置粒度SQL日期时间的


DateTime dateTime = DateTime.Now; 
state.LastUpdated = dateTime; 
Assert.AreEqual(dateTime , state.LastUpdated); 

我收到以下错误
Assert.AreEqual failed. Expected:<3/2/2011 9:52:32 AM>. Actual:<3/2/2011 9:52:00 AM>.

什么是SQL日期时间的粒度,并有可能调整它更多的粒度?

+0

这是不是谷歌? – 2011-03-02 18:31:23

+0

好吧,考虑到提供的两个答案是错的... – 2011-03-03 12:50:05

+0

因为已经过了10天,@Remus还没有发布答案,我将发布正确的答案,以便您可以为后代选择答案。 – 2011-03-14 16:10:08

SQL Server是精确到0,3和7毫秒http://msdn.microsoft.com/en-us/library/ms187819.aspx圆形增量。您无法调整它的粒度。

.Net DateTime更精细 - 小于毫秒,它也可以包含滴答声。您在断言测试时需要考虑到这一点。

如果您需要更高的精度,您可以在Sql Server中始终使用bigint而不是DateTime,并存储滴答数。 (DateTime具有接受Int64数量的滴答的构造函数。)

+2

这只是对于旧的'datetime'而言。多年以来,有可用的'datetime2'具有高达100纳秒的精度。 http://msdn.microsoft.com/en-us/library/bb677335.aspx – 2011-03-02 18:32:25

+1

我不知道你为什么谈论毫秒或纳秒。存储的实际值完全没有秒,更不用说更小的时间部分。看起来非常像'smalldatetime'在那里使用。 – 2011-03-02 21:01:24

+0

@Remus - 谢谢,我没有意识到这一点。在那种情况下,这将是更好的选择,因为tick代表100纳秒,因此您可以存储DateTime实例并重新加载它,而不会损失任何精度。 – 2011-03-02 21:30:34

SQL日期时间可以代表日期下降到几分之一秒,并且,根据:http://msdn.microsoft.com/en-us/library/ms187819.aspxdatetime values are rounded to increments of .000, .003, or .007 seconds

使用datetime2,精度高达100纳秒。 msdn.microsoft.com/en-us/library/bb677335.aspx

@Remus在留言中留言,并将其张贴为后人的答案。