我知道进行隐式类型转换不是一个好习惯。但是,当较低的值突然变得更高时,这确实是出乎意料的行为。
declare @LastSelectedDate DATETIME = '2021-11-09 13:52:29.187'
declare @LastSelectedDate_1 DATETIME2(7) = '2021-11-09 13:52:29.1866667'
SELECT IIF(@LastSelectedDate_1 > CAST(@LastSelectedDate AS DATETIME2), 1, 0)
SELECT IIF(@LastSelectedDate_1 > @LastSelectedDate, 1, 0)
这是一个错误还是我错过了什么?我正在使用 sql server 2016。
是的,我不知道他们为什么认为这种行为是个好主意。
尽管这是“设计使然”而不是错误
具体来说
datetime
,结束3
被视为3
重复出现,datetime
结束7
被视为6
重复出现。datetime
那个目的0
不受影响。(这些是该数据类型的唯一可能性,因为它每秒有 300 个“滴答声”)限制兼容性级别来解决这个单一问题似乎是一个大锤解决方案。您可以将其显式转换为
datetime2(3)
以避免这种情况退货