Странное поведение даты и времени в SQL Server - PullRequest
4 голосов
/ 23 августа 2011
 declare @data datetime
 set @data = '2011-01-01 23:59:59:999'
 select @data  

результат:

 2011-01-02 00:00:00.000

Второй пример:

 declare @data datetime
 set @data = '2011-01-01 23:59:59:999'
 select 1 where @data >= '2011-01-02 00:00:00:000'

результат

 1

Мой вопрос: почему и как это исправить?

редактировать

Проблема в SQL Server 2008

Ответы [ 2 ]

7 голосов
/ 23 августа 2011

У вас проблема с точностью..999 округляется до .000.

.997 максимально приближен к следующему дню.

declare @data datetime
set @data = '2011-01-01T23:59:59.997'
select @data  

Посмотрите здесь раздел "Округление даты и времени".Дробная вторая точность "http://msdn.microsoft.com/en-us/library/ms187819.aspx

Если вы работаете в SQL Server 2008, вы можете использовать datetime2 (3) , если хотите, чтобы точность снижалась до миллисекунды.

2 голосов
/ 23 августа 2011

Вам необходимо использовать более точный формат - datetime2 (ГГГГ-ММ-ДД ЧЧ: ММ: СС: XXXXXXX)

 declare @data datetime2
 set @data = '2011-01-01 23:59:59:999'
 select 1 where @data >= '2011-01-02 00:00:00:000'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...