Почему SQL автоматически приводит значение, полученное из поля DateTime (2), с разницей в 1 МИЛИСОН? - PullRequest
1 голос
/ 29 декабря 2011

У меня есть 2 таблицы: t1 и t2.

  • столбец даты на t1, который определяется как DateTime2(3)
  • столбец даты на t2, который определяется как DateTime

Я пытаюсь получить значение столбца Date из t1 и использовать его для обновления даты в t2.

Проблема:

Когда

t1.Date = '2011-07-23 14:01:32.114'

и когда я использую это значение для обновления t1.Date (который является DateTime), оператор обновления устанавливает его на:

2011-07-23 14:01:32.113

, что на 1 МИЛЛИОНДЫ ниже.

Вопрос:

Как можно предотвратить / принудительно применить это обновление, чтобы SQL снова преобразовал значение 2011-07-23 14:01:32.114, поступающее из столбца типа DateTime2 (3), в 2011-07-23 14:01:32.114, чтобы у меня не было разницы в 1 МИЛЛИНДдругой стол?

Ответы [ 2 ]

5 голосов
/ 29 декабря 2011

В двух словах, вы не можете. DateTime2 имеет большую дробную точность, чем DateTime.

Почему бы вам просто не изменить table1, чтобы использовать DateTime2 вместо DateTime?

С MSDN

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

и

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

3 голосов
/ 29 декабря 2011

Вы не можете.

DateTime имеет точность только около 1/300 секунды, поэтому это время не представляется в этом datatype.

DateTime поддерживает только миллисекунды, оканчивающиеся на 0, 3 или 7, и округляется до ближайшего.

например, SELECT CAST('20110723 23:59:59.999' AS DATETIME)

возвращает

2011-07-24 00:00:00.000

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...