Intereting Posts
Соответствующие значения для -Infinity & Infinity в Postgres Обновление MySQL с изменением нескольких столбцов является неатомным? sql запрос на бронирование гостиничного номера Найдите максимальные последовательные годы для каждого идентификатора в таблице (Oracle SQL) Как сделать SUM через две несвязанные таблицы? SQL n-to-n сопоставляет несколько значений Массовая вставка базы данных Javascript Поиск повторяющихся значений в таблице SQL Найдите первый ключ по дате с использованием sql, а вывод также содержит другие поля Почему Oracle игнорирует индекс с помощью ORDER BY? Аудиторские таблицы: поддержание ссылочной целостности – хорошее или плохое Как выполнить условие OR в наборе запросов django? Как представить структуру дерева в таблице mySQL Каковы некоторые хорошие альтернативы Framework сущностей Oracle: поиск повторяющихся строк в выбранном запросе

Доступ 2007: запрос для поля DateTime между двумя значениями Short Date

У меня есть форма, содержащая два текстовых поля для ввода пользователем. Оба текстовых поля имеют формат «Формат», заданный как «Краткая дата». Первая – это «дата начала», а другая – «дата окончания». У меня также есть несколько таблиц, каждый из которых имеет поле DateTime ("studystartdatetime"). Я хотел бы иметь возможность запрашивать эти таблицы, но ограничивать результаты строк, чьи поля DateTime находятся между введенными датами (включительно). В настоящее время это условие:

WHERE s.studystartdatetime BETWEEN forms!frmMain!txtstartdate AND forms!frmmain!txtenddate 

Это, однако, не возвращает строки, которые произошли в указанном enddate.

Я пробовал все комбинации CDate, Format и DateValue, о которых я мог подумать, чтобы обернуть одно или все из этих полей, но я всегда получаю ту же загадочную ошибку:

Выражение напечатано неверно, или оно слишком сложно для оценки. Например, числовое выражение может содержать слишком много сложных элементов. Попробуйте упростить выражение, присвоив части выражения переменным.

Некоторые примеры условий, которые я пробовал:

 WHERE CDate(Format(s.studystartdatetime, "yyyy/mm/dd")) BETWEEN forms!frmMain!txtstartdate AND forms!frmmain!txtenddate WHERE DateValue(Format(s.studystartdatetime, "yyyy/mm/dd")) BETWEEN forms!frmMain!txtstartdate AND forms!frmmain!txtenddate WHERE CDate(Format(s.studystartdatetime, "yyyy/mm/dd")) BETWEEN CDate(Format(forms!frmMain!txtstartdate, "yyyy/mm/dd")) AND CDate(Format(forms!frmmain!txtenddate, "yyyy/mm/dd")) WHERE DateValue(Format(s.studystartdatetime, "yyyy/mm/dd")) BETWEEN CDate(Format(forms!frmMain!txtstartdate, "yyyy/mm/dd")) AND CDate(Format(forms!frmmain!txtenddate, "yyyy/mm/dd")) WHERE DateValue(Format(s.studystartdatetime, "Short Date")) BETWEEN forms!frmMain!txtstartdate AND forms!frmmain!txtenddate 

И т.п.

Любой вход в это был бы очень признателен 🙂

Что происходит, так это то, что ваши короткие даты ввода дают значения даты и времени в полночь в начале дня ввода пользователя. Таким образом, диапазон с 2009-1-1 по 2009-1-10 (или какой-либо короткий формат даты используется в вашей системе) ищет события с самого начала с 1 января до самого начала 10 января и исключая события, которые произошло позже 10 января.

Чтобы исправить, добавьте 1 к дате окончания, которую пользователь помещает в поиск. Это будет искать с самого начала 1 января до самого начала 11 января, включая все события 10 января.

Наконец, события, которые произошли ровно в полночь 11 января, могут пробиться к вашим результатам таким образом, поэтому вместо использования BETWEEN вы должны использовать

studystartdatetime> = forms! frmMain! txtStartDate AND studystartdatetime <forms! frmMain! txtEndDate + 1