• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Выборка из БД по времени и дате

  • Автор темы YuryD
  • Дата начала
Y

YuryD

Господа!
Ни где не могу встретить примера, как сделать выборку из БД MS Access записей, в пределах от одного dd/mm/yyyy hh:mm:ss до другого dd/mm/yyyy hh:mm:ss.
Я написал запрос:

"SELECT * FROM report WHERE aDate >= DateValue('" + FormatDateTime("dd/mm/yyyy hh:mm:ss",Start) + "') AND aDate <= DateValue('" + FormatDateTime("dd/mm/yyyy hh:mm:ss",End) + "') ORDER BY aDate";

Но в ответ возвращаются все записи, начинающиеся с dd/mm/yyyy 00:00:00 переменной Start и до dd/mm/yyyy 00:00:00 переменной End. Такое впечатление, будь-то значения поля времени просто игнорируются и заменяются нулями, хотя я проверял, там стоят не нули! Результат аналогичный, даже если я вообще вообще убираю время, т.е.

"SELECT * FROM report WHERE aDate >= DateValue('" + FormatDateTime("dd/mm/yyyy",Start) +
"') AND aDate <= DateValue('" + FormatDateTime("dd/mm/yyyy",End) + "') ORDER BY aDate";

Оба этих запроса возвращаются одни и те же записи. Но во втором запросе это объяснимо, а в первом - непонятно...

P.S. Работаю в Builder C++ 6.
 
P

Pasha

Скорее всего DateValue возвращает именно дату, а не дату и время.
А зачем вообще колдовство с DateValue и FormatDateTime? Можно же дату как параметр передать, не преобразовывая его в строку. Будет что-то вроде
Код:
query->SQL.Text = "SELECT * FROM report WHERE aDate >= :StartDate and aDate <= :EndDate";
...
query->ParamByName("StartDate")->AsDateTime = Start;
query->ParamByName("StartEnd")->AsDateTime = End;
 
O

Over

Весь фокус в том, что в Аксессе дата в строковом представлении должна выглядеть так: #dd/mm/yyyy#. Т.е. сама дата должна быть заключена не в кавычки (как строка), а в решётки.
 
P

Pasha

Для: Over
Фокус в том, что за вставку даты в строковом представлении надо сразу бить по рукам.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!