У меня есть база данных SQL Server 2016, работающая на уровне совместимости 120. Когда я запускаю следующий запрос:
ALTER DATABASE testdb SET COMPATIBILITY_LEVEL = 120
DECLARE @d VARCHAR(30) = '2019-11-05 07:31:47.677'
DECLARE @dt DATETIME = @d
SELECT @d as [@d], @dt as [@dt], DATEPART(MILLISECOND, @d) as [@ms_d], DATEPART(MILLISECOND, @dt) as [@ms_dt]
Я получаю ожидаемый результат:
@d @dt @ms_d @ms_dt
------------------------------ ----------------------- ----------- -----------
2019-11-05 07:31:47.677 2019-11-05 07:31:47.677 677 677
ОднакоКогда я изменяю уровень совместимости на 130, я получаю:
@d @dt @ms_d @ms_dt
------------------------------ ----------------------- ----------- -----------
2019-11-05 07:31:47.677 2019-11-05 07:31:47.677 677 676
Любые мысли о том, почему я получаю 676 при уровне совместимости 130?
IВы рассмотрели Изменения в уровне совместимости 130 и видите изменения округления, связанные с преобразованием даты и времени, но мне, кажется, ничего не объясняет.
Спасибо за вашу помощь.