Точность DATETIME составляет 0,00333 секунды. Итак, вам нужно перейти к «2009-09-30 23: 59: 59.998», чтобы оно не округлялось до 1 октября.
Например:
select '2009-09-30 23:59:59.994',
cast('2009-09-30 23:59:59.994' as datetime)
union all select '2009-09-30 23:59:59.995',
cast('2009-09-30 23:59:59.995' as datetime)
union all select '2009-09-30 23:59:59.996',
cast('2009-09-30 23:59:59.996' as datetime)
union all select '2009-09-30 23:59:59.997',
cast('2009-09-30 23:59:59.997' as datetime)
union all select '2009-09-30 23:59:59.998',
cast('2009-09-30 23:59:59.998' as datetime)
union all select '2009-09-30 23:59:59.999',
cast('2009-09-30 23:59:59.999' as datetime)
возвращается:
2009-09-30 23:59:59.994 2009-09-30 23:59:59.993
2009-09-30 23:59:59.995 2009-09-30 23:59:59.997
2009-09-30 23:59:59.996 2009-09-30 23:59:59.997
2009-09-30 23:59:59.997 2009-09-30 23:59:59.997
2009-09-30 23:59:59.998 2009-09-30 23:59:59.997
2009-09-30 23:59:59.999 2009-10-01 00:00:00.000