为什么SQL自动转换来自DateTime(2)字段的值为1 MILISECONS差异?

pen*_*ake 1 sql t-sql sql-server datetime casting

我有2个表:t1和t2.

  • t1上的日期列,定义为 DateTime2(3)
  • t2上的日期列,定义为 DateTime

我试图从t1获取Date列的值,并使用它来更新t2上的Date.

问题:

什么时候

t1.Date = '2011-07-23 14:01:32.114'
Run Code Online (Sandbox Code Playgroud)

当我使用此值更新t1.Date(即DateTime)时,update语句将其设置为:

2011-07-23 14:01:32.113
Run Code Online (Sandbox Code Playgroud)

这是1 MILISECONDS更低.

题:

如何阻止/强制执行此更新,以便SQL 2011-07-23 14:01:32.114再次将来自DateTime2(3)类型列的值转换为2011-07-23 14:01:32.114使得我在另一个表上没有1 MILISECOND差异?

Lie*_*ers 5

简而言之,你做不到.DateTime2具有更大的分数精度DateTime.

你为什么不table1改用DateTime2而不是用DateTime

来自MSDN

使用time,date,datetime2和datetimeoffset数据类型进行新工作.这些类型与SQL标准一致.它们更便携.time,datetime2和datetimeoffset提供更多的秒精度.datetimeoffset为全局部署的应用程序提供时区支持.

datetime值四舍五入为.000,.003或.007秒的增量