Я сталкиваюсь с странной ошибкой, используя поля даты и времени в SQL Server 2005. Поле даты и времени отображается с точностью до миллисекунды, но похоже, что миллисекунды используются не всегда. Вот мой тестовый запрос:
SELECT col1, YEAR(col1) AS yr, MONTH(col1) AS mn, DAY(col1) AS dy
FROM mytable
WHERE col1 >= '2009-12-31 00:00:00.0' AND col1 <= '2009-12-31 23:59:59.999'
ORDER BY col1
В моих результатах я получаю:
col1 | yr | mn | dy
----------------------------+------+----+----
2009-12-31 00:00:00:00.000 | 2009 | 12 | 31
2010-01-01 00:00:00:00.000 | 2010 | 1 | 1
Проблема в том, что я получил дату 2010-01-01, хотя она не должна быть меньше или равна "2009-12-31 23: 59: 59.999". Но если я изменю запрос на использование «2009-12-31 23: 59: 59.99 8 », он будет работать нормально (даты и время 2010 не возвращаются).
Это ошибка или просто так работает SQL Server? Если это так, то есть ли какая-то причина для этого? Я столкнулся с миграцией некоторых запросов из MySQL, где это работает, как и ожидалось (хотя MySQL даже не хранит миллисекунды!).