Я работаю с T-SQL в SQL Server 2000, и у меня есть таблица TRANSACTIONS
, в которой столбец даты TRANDATE
определен как DateTime, среди многих других столбцов, которые не имеют отношения к этому вопросу.
Таблица заполнена транзакциями, охватывающими многие годы.Я столкнулся с кодом, тест, который меня смутил.Существует простой SELECT
, например:
SELECT TRANDATE, RECEIPTNUMBER FROM TRANSACTIONS WHERE TRANDATE BETWEEN '12/01/2010' and '12/31/2010' ORDER BY TRANDATE
, и он не возвращает две строки данных, которые, как я знаю, находятся в этой таблице.
С приведенным выше оператором последняя строка, которую он возвращает, по порядку имеет TRANDATE
из: 2010-12-31 00: 00: 00.000
Когда я изменяю оператор, как показано нижеЯ получаю две дополнительные строки за декабрь 2010 года, которые находятся в этой таблице:
SELECT TRANDATE, RECEIPTNUMBER FROM TRANSACTIONS WHERE TRANDATE BETWEEN '12/01/2010 00:00:00' and '12/31/2010 23:59:59' ORDER BY TRANDATE
Я попытался выяснить, почему оператор BETWEEN
не включает ВСЕ строки за 24 периода в 12/31 /2010 при использовании первого SELECT
, выше.И почему необходимо добавить явные часы в оператор SELECT
, как во втором, измененном операторе, чтобы заставить его вытягивать правильное количество строк?
Это из-за того, что TRANDATE
определяется как "DATETIME
"?
Исходя из этого, я думаю, что мне придется пройти через весь этот старый код, потому что эти BETWEEN
операторы замусорены во всей этой старой системе, и кажется, что она не вытягивает все данные должным образом,Я просто хотел разъяснений от некоторых людей в первую очередь.Спасибо!