как получить дату в запросе доступа - PullRequest
0 голосов
/ 21 апреля 2011

В Access 2000, какую функцию мы могли бы использовать, чтобы вернуть только значение даты?

CreateDate
20/4/2010 2:32:00 AM
20/4/2010 2:32:00 PM
19/4/2010 10:14:00 AM
17/5/2010 9:34:00 PM

Если я сделаю запрос с:

 SELECT * FROM tblTest WHERE CreateDate  <= #20/4/2010#

, я просто увижу 19/4/ 2010 запись только.

На самом деле результат должен отображать первые 3 записи, не так ли?

1 Ответ

2 голосов
/ 21 апреля 2011

Ваше буквальное значение даты, # 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#
...