Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> Выборка из БД по времени и дате, Как составить SQL запрос для фильтрации по времени и по дате
YuryD
Вставить ник
сообщение 21:02:2008, 22:23
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 1
Регистрация: 21:02:2008
Пользователь №: 15 465



Репутация: - 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.
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 4)
Pasha
Вставить ник
сообщение 21:02:2008, 23:08
Цитата Ответить 


Божественный
*****

Группа: Модеры
Сообщений: 1 200
Регистрация: 17:05:2006
Из: Минск
Пользователь №: 4 257
Специализация: .NET



Репутация: - 27 +


Скорее всего 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;
Подняться вверх 
 
Сообщение #2
sax_ol
Вставить ник
сообщение 22:02:2008, 07:14
Цитата Ответить 


==============
*****

Группа: Модеры
Сообщений: 1 740
Регистрация: 11:01:2007
Пользователь №: 8 750
Специализация: specialist



Репутация: - 27 +


Цитата(Pasha @ 22:02:2008, 01:08 )
Можно же дату как параметр передать

Не можно, а нужно! Да и between надо пользовать в таких ситуациях.
Подняться вверх 
 
Сообщение #3
Over
Вставить ник
сообщение 22:02:2008, 13:39
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 97
Регистрация: 4:07:2007
Из: РБ. Минская обл.
Пользователь №: 11 692
Специализация: C++, Delphi, Oracle, PL/SQL developer



Репутация: - 4 +


Весь фокус в том, что в Аксессе дата в строковом представлении должна выглядеть так: #dd/mm/yyyy#. Т.е. сама дата должна быть заключена не в кавычки (как строка), а в решётки.
Подняться вверх 
 
Сообщение #4
Pasha
Вставить ник
сообщение 22:02:2008, 13:51
Цитата Ответить 


Божественный
*****

Группа: Модеры
Сообщений: 1 200
Регистрация: 17:05:2006
Из: Минск
Пользователь №: 4 257
Специализация: .NET



Репутация: - 27 +


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


Быстрый ответ  Ответить  Новая тема 

> Быстрый ответ
Полужирный
Курсив
Подчеркнутый
Вставить изображение
Смайлики
Цитата
Код
 
 Отправлять уведомления об ответах на e-mail |  Включить смайлики |  Добавить подпись
   

 

RSS Текстовая версия Сейчас: 16:05:2008 - 17:33
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net