SQL datetime的粒度

时间:2011-03-02 18:02:19

标签: sql tsql ado.net

我在db中有一个datetime列,当我测试设置它时


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日期时间的粒度是多少,是否可以调整它以获得更精细的数据?

3 个答案:

答案 0 :(得分:5)

SQL Server精确到0,3和7毫秒http://msdn.microsoft.com/en-us/library/ms187819.aspx的舍入增量。您无法调整它以获得更多粒度。

.Net DateTime更精细 - 小于毫秒,它也可以包含刻度。在断言测试时,您需要将此考虑在内。

如果需要更高的精度,可以在Sql Server中使用bigint而不是DateTime,并存储刻度数。 (DateTime有一个构造函数,它接受Int64的刻度数。)

答案 1 :(得分:3)

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

@Remus在评论中注明,将其作为后代的答案发布。

答案 2 :(得分:2)

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