Разница в DATEPART МИЛЛИСЕКУНДАХ от COMPATIBILITY_LEVEL 120 до 130 - PullRequest
0 голосов
/ 05 ноября 2019

У меня есть база данных 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 и видите изменения округления, связанные с преобразованием даты и времени, но мне, кажется, ничего не объясняет.

Спасибо за вашу помощь.

...