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

Тема в разделе "SQL", создана пользователем YuryD, 22 фев 2008.

  1. YuryD

    YuryD New Member

    Регистрация:
    22 фев 2008
    Сообщения:
    4
    Симпатии:
    0
    Господа!
    Ни где не могу встретить примера, как сделать выборку из БД 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.
     
  2. Pasha

    Pasha Гость

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

    Over Well-Known Member

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

    Pasha Гость

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

Поделиться этой страницей