Странное поведение datetime в SQL Server
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
Ответы
Ответ 1
У вас проблема с точностью..999 округляется до 0,000.
.997 как можно ближе к следующему дню.
declare @data datetime
set @data = '2011-01-01T23:59:59.997'
select @data
Посмотрите здесь, в разделе "Округление datetime Fractional Second Precision"
http://msdn.microsoft.com/en-us/library/ms187819.aspx
Если вы находитесь на SQL Server 2008, вы можете использовать datetime2 (3), если вам нужна точность до миллисекунды.
Ответ 2
Вам нужно использовать более точный формат - 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'