В настоящее время у меня есть таблица в моей базе данных, отслеживающая дату начала и дату окончания службы. Мне нужно сравнить дату, введенную пользователем, чтобы узнать, находится ли она между датой начала и окончания. Моя проблема прямо сейчас заключается в том, что в таблице хранилища доступа, которые начинаются с даты, как DD/MM/YYYY
, текстовое поле в моей форме, в которое пользователь помещает свою дату, формируется как DD/MM/YYYY
. Однако, как только я попал в VBA и запустил SQL-запрос, он считывает дату как MM/DD/YYYY
.
Мой запрос:
SELECT * FROM table WHERE #09/01/2018# BETWEEN startDate AND endDate
Моя тестовая запись:
Таблица:
startDate endDate service
08/01/2018 02/02/2018 ABC
Это должно вернуть эту запись, однако, поскольку она читает ее как MM/DD/YYYY
это не так. Если я вхожу #13/01/2018#
он возвращает запись, поскольку обнаруживает, что 13
является датой и не может быть месяцем. Как я могу исправить это, так что он займет 09/01/2018
и возвращает запись?
Если это запрос VBA, ваши наблюдения верны. В дизайнере Query они будут работать должным образом.
Обзор Аллена Брауна здесь отличное объяснение; http://allenbrowne.com/ser-36.html с решениями.
В вашем запросе должна использоваться либо "обратная" последовательность США, либо последовательность ISO:
SELECT * FROM table WHERE #2018/01/09# BETWEEN startDate AND endDate
или, если вы построите его из кода:
SearchDate = SomeDateValue
SQL = "SELECT * FROM table WHERE #" & Format(SearchDate, "yyyy\/mm\/dd") & "# BETWEEN startDate AND endDate"
или, если вы всегда ищете сегодня:
SQL = "SELECT * FROM table WHERE Date() BETWEEN startDate AND endDate"