Объявить дату и выбранную дату не совпадают - PullRequest
0 голосов
/ 30 января 2019

Я объявил переменную даты-времени с именем @dt -

declare @dt Datetime = '2019-01-29 11:06:31.095'

Когда я выбираю переменную, она дает неправильную дату

select @dt --it gives '2019-01-29 11:06:31.097'

Ответы [ 3 ]

0 голосов
/ 30 января 2019

дата / время в документах :

Точность - округляется с шагом .000, .003 или .007 секунд

Использовать время и датутипы данных datetime2 и datetimeoffset для новой работы.Эти типы соответствуют стандарту SQL.Они более портативны.time, datetime2 и datetimeoffset обеспечивают большую точность секунд.datetimeoffset обеспечивает поддержку часовых поясов для глобально развернутых приложений.

0 голосов
/ 30 января 2019

В руководстве не упоминается тот факт, что DATETIME хранит даты с разрешением 1/300 th секунды, то есть кратно 0,0033333333 ... секунды,Вот некоторые литералы и результирующие значения даты и времени:

literal                    datetime
2019-01-29 11:06:31.094    2019-01-29 11:06:31.093
2019-01-29 11:06:31.095    2019-01-29 11:06:31.097
2019-01-29 11:06:31.096    2019-01-29 11:06:31.097
2019-01-29 11:06:31.097    2019-01-29 11:06:31.097
2019-01-29 11:06:31.098    2019-01-29 11:06:31.097
2019-01-29 11:06:31.099    2019-01-29 11:06:31.100

Вам следует начать использовать тип данных DATETIME2, который имеет более широкий диапазон (год от 0001 до 9999) и большую точность (до 7 цифр)после десятичного числа).Вы можете объявить столбец как DATETIME2(3), чтобы иметь ровно три цифры после десятичной дроби.

0 голосов
/ 30 января 2019

В соответствии с руководством :

значения даты и времени округляются с приращением до .000, .003 или .007 секунд, как показано в следующей таблице.

Таблица в приведенной ссылке четко показывает причину, по которой ваше значение преобразуется из '.095' в '.097':

User-specified value    System stored value
-----------------------------------------------
01/01/98 23:59:59.999   1998-01-02 00:00:00.000
01/01/98 23:59:59.995

01/01/98 23:59:59.996

01/01/98 23:59:59.997

01/01/98 23:59:59.998   1998-01-01 23:59:59.997
...