Ваше буквальное значение даты, # 20/4/2010 #, на самом деле является значением даты / времени, которое представляет полночь 20 апреля. См. Этот пример в «Немедленном окне», в котором функция Format () используется для отображения полной даты./ Значение времени, представленное этим литералом.
? Format(#20/4/2010#, "d/m/yyyy hh:nn:ss AMPM")
20/4/2010 12:00:00 AM
Так что и 20.04.2010 2:32:00, и 20.04.2010 14:32:00 исключены из условия WHERE, поскольку онипревышают 20/4/2010 12:00:00 AM.
Если вы выполняете запрос в сеансе Access, вы можете использовать функцию DateValue (), чтобы преобразовать значения CreateDate в полночьта же датаЭтот запрос должен вернуть то, что вы ожидали:
SELECT * FROM tblTest WHERE DateValue(CreateDate) <= #20/4/2010#
Другой подход заключается в использовании полуночи на следующий день в качестве значения отсечения.
SELECT * FROM tblTest WHERE CreateDate < #21/4/2010#
Второй запрос может выполняться значительно быстрее, посколькуэто не потребует применения функции DateValue () к каждому значению CreateDate в tblTest.И если CreateDate проиндексирован, второй запрос будет еще быстрее.Первый запрос не сможет воспользоваться индексом CreateDate.
Также я предпочитаю использовать однозначный формат даты для литеральных значений, поэтому написал бы запрос следующим образом:
SELECT * FROM tblTest WHERE CreateDate < #2010/4/21#