今天接到用户的需求,为什么我们将一个字符串的时间转化为Datetime时,毫秒数会发生变化。
具体表现如下:
--2016-02-23 14:44:55.320
select convert(datetime,'2016-02-23 14:44:55.328')
--2016-02-23 14:44:55.327
解决方法:
select convert(datetime2(3),'2016-02-23 14:44:55.321')
--2016-02-23 14:44:55.321
select convert(datetime2(3),'2016-02-23 14:44:55.328')
--2016-02-23 14:44:55.327
导致问题原因:
因为SQL Server 存储引擎决定了Datetime在存储的时候只能精确到1/300秒。所以存储或者转化的时候都会按照这个精度来进行。比如.006可能变成.007.
所以如果需要很精确的值,那么请采用datetime2,datetime2的精度是100ns。